Bagikan melalui


UIElement.Measure(Size) Metode

Definisi

Updates DesiredSizeUIElement. Biasanya, objek yang menerapkan tata letak kustom untuk anak tata letak mereka memanggil metode ini dari implementasi MeasureOverride mereka sendiri untuk membentuk pembaruan tata letak rekursif.

public:
 virtual void Measure(Size availableSize) = Measure;
void Measure(Size const& availableSize);
public void Measure(Size availableSize);
function measure(availableSize)
Public Sub Measure (availableSize As Size)

Parameter

availableSize
Size

Ruang yang tersedia yang dapat dialokasikan induk ke objek anak. Objek anak dapat meminta ruang yang lebih besar dari yang tersedia; ukuran yang disediakan mungkin diakomodasi jika menggulir atau perilaku pengubahan ukuran lainnya dimungkinkan dalam kontainer tertentu.

Contoh

Contoh ini mengimplementasikan MeasureOverride untuk menyesuaikan logika pass "Measure" untuk implementasi panel kustom. Perhatikan secara khusus aspek kode ini:

  • Iterasi atas anak-anak.
  • Untuk setiap anak, memanggil Pengukuran, menggunakan Ukuran yang masuk akal berdasarkan bagaimana logika panel memperlakukan jumlah anak dan batas ukurannya sendiri yang diketahui.
  • Mengembalikan ukurannya (dalam hal ini, panel sederhana ini mengembalikan ukuran tetap daripada ukuran yang dihitung pada akumulasi pengukuran).
// First measure all children and return available size of panel
protected override Size MeasureOverride(Size availableSize)
{

    // Measure first 9 children giving them space up to 100x100, remaining children get 0x0 
    int i = 0;
    foreach (FrameworkElement child in Children)
    {
        if (i < 9)
        {
            child.Measure(new Size(100, 100));
        }
        else
        {
            child.Measure(new Size(0, 0));
        }

        i++;
    }


    // return the size available to the whole panel, which is 300x300
    return new Size(300, 300);
}
'First measure all children and return available size of panel 
Protected Overrides Function MeasureOverride(ByVal availableSize As Size) As Size
    'Measure first 9 children giving them space up to 100x100, remaining children get 0x0 
    Dim i As Integer = 0
    For Each child As FrameworkElement In Children
        If i < 9 Then
            child.Measure(New Size(100, 100))
        Else
            child.Measure(New Size(0, 0))
        End If
        i += 1
    Next
    'return the size available to the whole panel, which is 300x300 
    Return New Size(300, 300)
End Function

Keterangan

Panggilan Pengukuran berpotensi mencapai implementasi MeasureOverride dari kelas tertentu tersebut. Jika tidak, sebagian besar kelas FrameworkElement memiliki perilaku tata letak default implisit untuk Pengukuran.

availableSize dapat berupa angka apa pun dari nol hingga tak terbatas. Elemen yang berpartisipasi dalam tata letak harus mengembalikan Ukuran minimum yang diperlukan untuk availableSize tertentu.

Komputasi penempatan tata letak awal dalam UI XAML terdiri dari panggilan Pengukuran dan panggilan Susun , dalam urutan tersebut. Selama panggilan Ukur, sistem tata letak menentukan persyaratan ukuran elemen menggunakan pengukuran availableSize . Selama panggilan Susun , sistem tata letak menyelesaikan ukuran dan posisi kotak pembatas elemen.

Saat tata letak pertama kali diproduksi, tata letak selalu memiliki panggilan Pengukuran yang terjadi sebelum Atur. Namun, setelah tata letak pertama berlalu, panggilan Atur dapat terjadi tanpa Pengukuran sebelumnya. Ini dapat terjadi ketika properti yang hanya memengaruhi Pengaturan diubah (seperti perataan), atau ketika induk menerima Pengaturan tanpa Pengukuran.

Panggilan Pengukuran akan secara otomatis membatalkan informasi Pengaturan apa pun. Pembaruan tata letak umumnya terjadi secara asinkron (pada satu waktu yang ditentukan oleh sistem tata letak). Elemen mungkin tidak segera mencerminkan perubahan pada properti yang memengaruhi ukuran elemen (seperti Lebar).

Berlaku untuk

Lihat juga