Metadata Properti Kerangka Kerja
Opsi metadata properti kerangka kerja dilaporkan untuk properti elemen objek yang dianggap berada di tingkat kerangka kerja WPF dalam arsitektur Windows Presentation Foundation (WPF). Secara umum penunjukan tingkat kerangka kerja WPF memerlukan fitur seperti penyajian, pengikatan data, dan penyempurnaan sistem properti ditangani oleh API presentasi WPF dan executable. Metadata properti kerangka kerja dikueri oleh sistem ini untuk menentukan karakteristik khusus fitur dari properti elemen tertentu.
Prasyarat
Topik ini mengasumsikan bahwa Anda memahami properti dependensi dari perspektif konsumen properti dependensi yang ada pada kelas Windows Presentation Foundation (WPF), dan telah membaca Gambaran Umum Properti Dependensi. Anda juga harus membaca Metadata Properti Dependensi.
Apa yang Dikomunikasikan oleh Metadata Properti Kerangka Kerja
Metadata properti kerangka kerja dapat dibagi menjadi kategori berikut:
Melaporkan properti tata letak yang memengaruhi elemen (AffectsArrange, AffectsMeasure, AffectsRender). Anda dapat mengatur bendera ini dalam metadata jika properti memengaruhi aspek masing-masing, dan Anda juga menerapkan MeasureOverride / ArrangeOverride metode di kelas Anda untuk memberikan perilaku dan informasi penyajian tertentu ke sistem tata letak. Biasanya, implementasi seperti itu akan memeriksa pembatalan properti di properti dependensi di mana salah satu properti tata letak ini benar dalam metadata properti, dan hanya pembatalan yang perlu meminta kode tata letak baru.
Melaporkan properti tata letak yang memengaruhi elemen induk elemen (AffectsParentArrange, AffectsParentMeasure). Beberapa contoh di mana bendera ini diatur secara default adalah FixedPage.Left dan Paragraph.KeepWithNext.
Inherits. Secara default, properti dependensi tidak mewarisi nilai. OverridesInheritanceBehavior memungkinkan jalur pewarisan juga melakukan perjalanan ke pohon visual, yang diperlukan untuk beberapa skenario komposit kontrol.
Catatan
Istilah "mewarisi" dalam konteks nilai properti berarti sesuatu yang spesifik untuk properti dependensi; itu berarti bahwa elemen anak dapat mewarisi nilai properti dependensi aktual dari elemen induk karena kemampuan tingkat kerangka kerja WPF dari sistem properti WPF. Ini tidak ada hubungannya langsung dengan jenis kode terkelola dan warisan anggota melalui jenis turunan. Untuk detailnya, lihat Pewarisan Nilai Properti.
Melaporkan karakteristik pengikatan data (IsNotDataBindable, BindsTwoWayByDefault). Secara default, properti dependensi dalam kerangka kerja mendukung pengikatan data, dengan perilaku pengikatan satu arah. Anda dapat menonaktifkan pengikatan data jika tidak ada skenario untuk itu apa pun (karena mereka dimaksudkan untuk fleksibel dan dapat diperluas, tidak ada banyak contoh properti tersebut dalam API WPF default). Anda dapat mengatur pengikatan untuk memiliki default dua arah untuk properti yang mengikat perilaku kontrol di antara bagian komponennya (IsSubmenuOpen adalah contoh) atau di mana pengikatan dua arah adalah skenario umum dan diharapkan untuk pengguna (Text adalah contoh). Mengubah metadata terkait pengikatan data hanya memengaruhi default; berdasarkan per-pengikatan bahwa default selalu dapat diubah. Untuk detail tentang mode pengikatan dan pengikatan secara umum, lihat Gambaran Umum Pengikatan Data.
Melaporkan apakah properti harus di-journal oleh aplikasi atau layanan yang mendukung jurnal (Journal). Untuk elemen umum, jurnal tidak diaktifkan secara default, tetapi diaktifkan secara selektif untuk kontrol input pengguna tertentu. Properti ini dimaksudkan untuk dibaca oleh layanan jurnal termasuk implementasi WPF jurnal, dan biasanya diatur pada kontrol pengguna seperti pilihan pengguna dalam daftar yang harus dipertahankan di seluruh langkah navigasi. Untuk informasi tentang jurnal, lihat Gambaran Umum Navigasi.
Membaca FrameworkPropertyMetadata
Masing-masing properti yang ditautkan di atas adalah properti spesifik yang FrameworkPropertyMetadata ditambahkan ke kelas UIPropertyMetadatadasar langsungnya . Masing-masing properti ini akan secara false
default. Permintaan metadata untuk properti di mana mengetahui nilai properti ini penting harus mencoba mentransmisikan metadata yang dikembalikan ke FrameworkPropertyMetadata, lalu memeriksa nilai properti individual sesuai kebutuhan.
Menentukan Metadata
Saat Anda membuat instans metadata baru untuk tujuan menerapkan metadata ke pendaftaran properti dependensi baru, Anda memiliki pilihan kelas metadata mana yang akan digunakan: dasar PropertyMetadata atau beberapa kelas turunan seperti FrameworkPropertyMetadata. Secara umum, Anda harus menggunakan FrameworkPropertyMetadata, terutama jika properti Anda memiliki interaksi dengan sistem properti dan fungsi WPF seperti tata letak dan pengikatan data. Opsi lain untuk skenario yang lebih canggih adalah mendapatkan dari FrameworkPropertyMetadata untuk membuat kelas pelaporan metadata Anda sendiri dengan informasi tambahan yang dibawa dalam anggotanya. Atau Anda dapat menggunakan PropertyMetadata atau UIPropertyMetadata untuk mengomunikasikan tingkat dukungan untuk fitur implementasi Anda.
Untuk properti yang ada (AddOwner atau OverrideMetadata panggilan), Anda harus selalu mengambil alih dengan jenis metadata yang digunakan oleh pendaftaran asli.
Jika Anda membuat FrameworkPropertyMetadata instans, ada dua cara untuk mengisi metadata tersebut dengan nilai untuk properti tertentu yang mengomunikasikan karakteristik properti kerangka kerja:
FrameworkPropertyMetadata Gunakan tanda tangan konstruktor yang memungkinkan
flags
parameter. Parameter ini harus diisi dengan semua nilai gabungan yang diinginkan dari FrameworkPropertyMetadataOptions bendera enumerasi.Gunakan salah satu tanda tangan tanpa
flags
parameter, lalu atur setiap properti FrameworkPropertyMetadata Boolean pelaporan ketrue
untuk setiap perubahan karakteristik yang diinginkan. Jika Anda melakukan ini, Anda harus mengatur properti ini sebelum elemen apa pun dengan properti dependensi ini dibangun; properti Boolean adalah baca-tulis untuk memungkinkan perilaku ini menghindariflags
parameter dan masih mengisi metadata, tetapi metadata harus disegel secara efektif sebelum penggunaan properti. Dengan demikian, mencoba mengatur properti setelah metadata diminta akan menjadi operasi yang tidak valid.
Perilaku Penggabungan Metadata Properti Kerangka Kerja
Saat Anda mengambil alih metadata properti kerangka kerja, karakteristik metadata yang berbeda digabungkan atau diganti.
PropertyChangedCallback digabungkan. Jika Anda menambahkan panggilan balik baru PropertyChangedCallbackdisimpan dalam metadata. Jika Anda tidak menentukan PropertyChangedCallback dalam penimpaan PropertyChangedCallback , nilai dipromosikan sebagai referensi dari leluhur terdekat yang menentukannya dalam metadata.
Perilaku sistem properti aktual untuk PropertyChangedCallback adalah bahwa implementasi untuk semua pemilik metadata dalam hierarki dipertahankan dan ditambahkan ke tabel, dengan urutan eksekusi oleh sistem properti adalah bahwa panggilan balik dari kelas yang paling turunan paling dalam dipanggil terlebih dahulu. Panggilan balik yang diwariskan hanya berjalan sekali, dihitung sebagai milik kelas yang menempatkannya dalam metadata.
DefaultValue diganti. Jika Anda tidak menentukan PropertyChangedCallback dalam penimpaan DefaultValue , nilai berasal dari leluhur terdekat yang menentukannya dalam metadata.
CoerceValueCallback implementasi diganti. Jika Anda menambahkan panggilan balik baru CoerceValueCallbackdisimpan dalam metadata. Jika Anda tidak menentukan CoerceValueCallback dalam penimpaan CoerceValueCallback , nilai dipromosikan sebagai referensi dari leluhur terdekat yang menentukannya dalam metadata.
Perilaku sistem properti adalah bahwa hanya CoerceValueCallback metadata langsung yang dipanggil. Tidak ada referensi ke implementasi lain CoerceValueCallback dalam hierarki yang dipertahankan.
Bendera FrameworkPropertyMetadataOptions enumerasi digabungkan sebagai operasi OR bitwise. Jika Anda menentukan FrameworkPropertyMetadataOptions, opsi asli tidak ditimpa. Untuk mengubah opsi, atur properti yang sesuai pada FrameworkPropertyMetadata. Misalnya, jika objek asli FrameworkPropertyMetadata mengatur FrameworkPropertyMetadataOptions.NotDataBindable bendera, Anda dapat mengubahnya dengan mengatur FrameworkPropertyMetadata.IsNotDataBindable ke
false
.
Perilaku ini diimplementasikan oleh Merge, dan dapat diambil alih pada kelas metadata turunan.
Baca juga
.NET Desktop feedback