Share via


FrameworkElement.ArrangeOverride(Size) Metode

Definisi

Menyediakan perilaku untuk pass tata letak "Atur". Kelas dapat mengambil alih metode ini untuk menentukan perilaku pass "Arrange" mereka sendiri.

protected:
 virtual Size ArrangeOverride(Size finalSize) = ArrangeOverride;
Size ArrangeOverride(Size const& finalSize);
protected virtual Size ArrangeOverride(Size finalSize);
function arrangeOverride(finalSize)
Protected Overridable Function ArrangeOverride (finalSize As Size) As Size

Parameter

finalSize
Size

Area akhir dalam induk yang harus digunakan objek ini untuk mengatur dirinya sendiri dan anak-anaknya.

Mengembalikan

Ukuran aktual yang digunakan setelah elemen diatur dalam tata letak.

Contoh

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

  • Iterasi atas anak-anak.
  • Untuk setiap anak, panggilan Atur, menggunakan Rect di mana Tinggi dan Lebar didasarkan pada DesiredSize, dan X dan Y didasarkan pada logika yang khusus untuk panel.
  • Mengembalikan ukurannya (dalam hal ini, panel sederhana ini mengembalikan ukuran tetap daripada ukuran yang dihitung pada akumulasi pengukuran nilai Rect yang disusun).
// Second arrange all children and return final size of panel
protected override Size ArrangeOverride(Size finalSize)
{
    // Get the collection of children
    UIElementCollection mychildren = Children;

    // Get total number of children
    int count = mychildren.Count;

    // Arrange children
    // We're only allowing 9 children in this panel.  More children will get a 0x0 layout slot.
    int i;
    for (i = 0; i < 9; i++)
    {

        // Get (left, top) origin point for the element in the 3x3 block
        Point cellOrigin = GetOrigin(i, 3, new Size(100, 100));

        // Arrange child
        // Get desired height and width. This will not be larger than 100x100 as set in MeasureOverride.
        double dw = mychildren[i].DesiredSize.Width;
        double dh = mychildren[i].DesiredSize.Height;

        mychildren[i].Arrange(new Rect(cellOrigin.X, cellOrigin.Y, dw, dh));

    }

    // Give the remaining children a 0x0 layout slot
    for (i = 9; i < count; i++)
    {
        mychildren[i].Arrange(new Rect(0, 0, 0, 0));
    }


    // Return final size of the panel
    return new Size(300, 300);
}

Keterangan

Metode ini memiliki implementasi default yang melakukan tata letak bawaan untuk sebagian besar kelas turunan FrameworkElement . ArrangeOverride menyediakan perilaku untuk Pengaturan, setiap kali Pengaturan dipanggil baik dengan logika tata letak internal atau kode aplikasi Anda sendiri, termasuk metode ArrangeOverride Anda sendiri untuk kelas lain. Jika Anda menghasilkan kontrol templat, logika ArrangeOverride menentukan logika tata letak pass "Arrange" 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 pass "Arrange" pemrosesan tata letak harus mengambil alih ArrangeOverride. Pola implementasi harus memanggil Atur pada setiap objek anak yang terlihat, dan melewati ukuran akhir yang diinginkan untuk setiap objek anak sebagai parameter finalRect . Jika Pengaturan tidak dipanggil, objek anak tidak dirender.

Beberapa kelas yang tidak disegel yang ada memberikan implementasi penimpaan dari metode ini. Yang menonjol termasuk StackPanel dan Grid. Biasanya, perilaku ArrangeOverride menghasilkan finalSize yang tidak melanggar nilai yang ditentukan pengguna yang ditempatkan pada kontainer tata letak itu sendiri. Misalnya, finalSize biasanya tidak lebih besar dari Tinggi dan Lebar kontainer, mempertanggungjawabkan nilai Margin atau Padding yang memengaruhi area konten. Kontrol yang secara khusus memiliki skenario untuk melebihi ukuran kontainer dapat mengembalikan nilai yang lebih besar, tetapi siapa pun yang menggunakan kontrol tersebut harus mempertangungjawabkan masalah kliping dan posisi yang dihasilkan darinya. Nilai yang diteruskan implementasi ArrangeOverride ke Atur untuk setiap objek anak umumnya adalah nilai yang diatur dalam DesiredSize oleh panggilan Pengukuran sebelumnya.

Berlaku untuk

Lihat juga