FrameworkElement.MeasureOverride(Size) Metode

Definisi

Menyediakan perilaku untuk lulus "Ukur" dari siklus tata letak. Kelas dapat mengambil alih metode ini untuk menentukan perilaku lulus "Ukur" mereka sendiri.

protected:
 virtual Size MeasureOverride(Size availableSize) = MeasureOverride;
Size MeasureOverride(Size const& availableSize);
protected virtual Size MeasureOverride(Size availableSize);
function measureOverride(availableSize)
Protected Overridable Function MeasureOverride (availableSize As Size) As Size

Parameter

availableSize
Size

Ukuran yang tersedia yang bisa diberikan obyek ini pada obyek turunan. Infinity dapat ditentukan sebagai nilai untuk menunjukkan bahwa objek akan berukuran untuk konten apa pun yang tersedia.

Mengembalikan

Ukuran yang dibutuhkan objek ini selama tata letak, berdasarkan perhitungan ukuran yang dialokasikan untuk objek anak atau berdasarkan pertimbangan lain seperti ukuran kontainer tetap.

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

Metode ini memiliki implementasi default yang melakukan tata letak bawaan untuk sebagian besar kelas turunan FrameworkElement . MeasureOverride menyediakan perilaku untuk Pengukuran, setiap kali Pengukuran dipanggil baik oleh logika tata letak internal atau kode aplikasi Anda sendiri, termasuk metode MeasureOverride Anda sendiri untuk kelas lain. Jika Anda menghasilkan kontrol templat, logika MeasureOverride menentukan logika tata letak pass "Ukur" spesifik kontrol Anda.

Desain umum tentang bagaimana elemen melalui proses tata letak saat aplikasi Anda berjalan dibagi menjadi dua langkah: pass "Ukur", lalu pass "Atur". Penulis kontrol (atau penulis panel) yang ingin menyesuaikan lulus "Ukur" pemrosesan tata letak harus mengambil alih MeasureOverride. Implementasi Anda harus melakukan hal berikut:

  • Iterasi koleksi objek anak khusus kelas Anda yang merupakan bagian dari tata letak, dan panggil Ukur pada setiap objek anak.
  • Segera dapatkan DesiredSize pada setiap anak (ini ditetapkan sebagai properti setelah Pengukuran dipanggil).
  • Komputasi ukuran induk yang diinginkan bersih, berdasarkan pengukuran ukuran yang berjalan yang diperlukan untuk objek anak. Nilai yang dikembalikan dari MeasureOverride harus menjadi ukuran objek yang diinginkan sendiri, yang kemudian menjadi input Pengukuran untuk induk objek saat ini. Proses yang sama ini berlanjut melalui sistem tata letak hingga akar pohon halaman/objek tercapai. Selama proses ini, objek anak mungkin mengembalikan ukuran DesiredSize yang lebih besar daripada ukuran ukuran awal yang tersedia untuk menunjukkan bahwa objek anak menginginkan lebih banyak ruang. Ini mungkin ditangani dalam implementasi Anda sendiri dengan memperkenalkan wilayah yang dapat digulir, mengubah ukuran kontrol induk, menetapkan beberapa cara urutan yang ditumpuk, atau sejumlah solusi untuk mengukur atau mengatur konten yang dapat bervariasi tergantung pada fungsionalitas kontainer tata letak yang dimaksudkan.

Berlaku untuk

Lihat juga