Bagikan melalui


Warisan Nilai Properti

Pewarisan nilai properti adalah fitur sistem properti Windows Presentation Foundation (WPF). Pewarisan nilai properti memungkinkan elemen turunan di pohon elemen untuk mendapatkan nilai properti tertentu dari elemen induk, mewarisi nilai tersebut karena ditetapkan di mana saja di elemen induk terdekat. Elemen induk mungkin juga telah memperoleh nilainya melalui pewarisan nilai properti, sehingga sistem berpotensi berulang sampai ke akar halaman. Pewarisan nilai properti bukan perilaku sistem properti default; properti harus dibuat dengan pengaturan metadata tertentu untuk menyebabkan properti tersebut memulai pewarisan nilai properti pada elemen anak.

Warisan Nilai Properti adalah Pewarisan Penahanan

"Warisan" sebagai istilah di sini tidak cukup konsep yang sama dengan warisan dalam konteks jenis dan pemrograman berorientasi objek umum, di mana kelas turunan mewarisi definisi anggota dari kelas dasar mereka. Arti warisan itu juga aktif di WPF: properti yang didefinisikan dalam berbagai kelas dasar diekspos sebagai atribut untuk kelas XAML turunan ketika digunakan sebagai elemen, dan diekspos sebagai anggota untuk kode. Pewarisan nilai properti terutama tentang bagaimana nilai properti dapat mewarisi dari satu elemen ke elemen lainnya berdasarkan hubungan induk-anak dalam pohon elemen. Pohon elemen tersebut paling langsung terlihat saat menyarangkan elemen di dalam elemen lain saat Anda menentukan aplikasi dalam markup XAML. Pohon objek juga dapat dibuat secara terprogram dengan menambahkan objek ke koleksi objek lain yang ditunjuk, dan warisan nilai properti bekerja dengan cara yang sama di pohon jadi pada run time.

Aplikasi Praktis Pewarisan Nilai Properti

API WPF mencakup beberapa properti yang mengaktifkan pewarisan properti. Biasanya, skenario untuk ini adalah bahwa mereka melibatkan properti di mana tepat bahwa properti diatur hanya sekali per halaman, tetapi di mana properti tersebut juga merupakan anggota dari salah satu kelas elemen dasar dan dengan demikian juga akan ada di sebagian besar elemen anak. Misalnya, FlowDirection properti mengontrol arah mana yang mengalir konten harus disajikan dan disusun di halaman. Biasanya, Anda ingin konsep aliran teks ditangani secara konsisten di semua elemen turunan. Jika arah alur karena beberapa alasan reset di beberapa tingkat pohon elemen oleh pengguna atau tindakan lingkungan, biasanya harus diatur ulang di seluruh. FlowDirection Ketika properti dibuat untuk mewarisi, nilai hanya perlu diatur atau diatur ulang sekali pada tingkat di pohon elemen yang mencakup kebutuhan presentasi setiap halaman dalam aplikasi. Bahkan nilai default awal akan mewarisi dengan cara ini. Model pewarisan nilai properti masih memungkinkan elemen individual untuk mengatur ulang nilai untuk kasus langka di mana memiliki campuran arah aliran disengaja.

Membuat Properti Kustom Dapat Diwariskan

Dengan mengubah metadata properti kustom, Anda juga dapat membuat properti kustom Anda sendiri dapat diwariskan. Namun, perhatikan bahwa menunjuk properti sebagai dapat diwariskan memang memiliki beberapa pertimbangan performa. Dalam kasus di mana properti tersebut tidak memiliki nilai lokal yang ditetapkan, atau nilai yang diperoleh melalui gaya, templat, atau pengikatan data, properti yang dapat diwariskan menyediakan nilai properti yang ditetapkan ke semua elemen anak di pohon logis.

Untuk membuat properti berpartisipasi dalam pewarisan nilai, buat properti terlampir kustom, seperti yang dijelaskan dalam Daftarkan Properti Terlampir. Daftarkan properti dengan metadata (FrameworkPropertyMetadata) dan tentukan opsi "Warisan" dalam pengaturan opsi dalam metadata tersebut. Pastikan juga bahwa properti memiliki nilai default yang ditetapkan, karena nilai tersebut sekarang akan diwarisi. Meskipun Anda mendaftarkan properti sebagai terlampir, Anda mungkin juga ingin membuat properti "pembungkus" untuk mendapatkan/mengatur akses pada jenis pemilik, seperti yang Anda lakukan untuk properti dependensi "tidak terpasang". Setelah melakukannya, properti yang dapat diwariskan dapat diatur dengan menggunakan pembungkus properti langsung pada jenis pemilik atau jenis turunan, atau dapat diatur dengan menggunakan sintaks properti terlampir pada apa pun DependencyObject.

Properti terlampir secara konseptual mirip dengan properti global; Anda dapat memeriksa nilai pada apa pun DependencyObject dan mendapatkan hasil yang valid. Skenario umum untuk properti terlampir adalah mengatur nilai properti pada elemen turunan, dan skenario tersebut lebih efektif jika properti yang dimaksud adalah properti terlampir yang selalu secara implisit hadir sebagai properti terlampir pada setiap elemen (DependencyObject) di pohon.

Catatan

Meskipun pewarisan nilai properti mungkin tampak berfungsi untuk properti dependensi yang tidak terpasang, perilaku warisan untuk properti yang tidak terpasang melalui batas elemen tertentu di pohon run-time tidak terdefinisi. Selalu gunakan RegisterAttached untuk mendaftarkan properti tempat Anda menentukan Inherits dalam metadata.

Mewarisi nilai properti di seluruh batas pohon

Warisan properti bekerja dengan melintasi pohon elemen. Pohon ini sering sejajar dengan pohon logis. Namun, setiap kali Anda menyertakan objek tingkat inti WPF dalam markup yang mendefinisikan pohon elemen, seperti Brush, Anda telah membuat pohon logika terhenti. Pohon logis sejati tidak secara konseptual diperluas melalui Brush, karena pohon logis adalah konsep tingkat kerangka kerja WPF. Anda dapat melihat ini tercermin dalam hasil saat menggunakan metode LogicalTreeHelper. Namun, warisan nilai properti dapat menjembatani kesenjangan ini di pohon logis dan masih dapat meneruskan nilai yang diwariskan, selama properti yang dapat diwariskan terdaftar sebagai properti terlampir dan tidak ada batas pemblokiran warisan yang disengaja (seperti Frame) yang ditemui.

Baca juga