UIElement.Measure(Size) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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).