Metadata properti kerangka kerja (WPF .NET)
Anda dapat mengatur opsi metadata properti kerangka kerja untuk properti dependensi di tingkat kerangka kerja Windows Presentation Foundation (WPF). Penunjukan tingkat kerangka kerja WPF berlaku ketika API presentasi WPF dan executable menangani penyajian dan pengikatan data. API presentasi dan executable mengkueri FrameworkPropertyMetadata properti dependensi.
Prasyarat
Artikel ini mengasumsikan pengetahuan dasar tentang properti dependensi, dan bahwa Anda telah membaca gambaran umum properti Dependensi. Untuk mengikuti contoh dalam artikel ini, ini membantu jika Anda terbiasa dengan Extensible Application Markup Language (XAML) dan tahu cara menulis aplikasi WPF.
Kategori metadata properti kerangka kerja
FrameworkPropertyMetadata termasuk dalam kategori ini:
Metadata yang memengaruhi tata letak elemen, khususnya AffectsArrangebendera metadata , AffectsMeasure, dan AffectsRender . Anda dapat mengatur bendera tersebut jika implementasi properti dependensi Anda memengaruhi aspek visual dan Anda menerapkan MeasureOverride atau ArrangeOverride di kelas Anda. Metode
MeasureOverride
danArrangeOverride
menyediakan perilaku khusus implementasi dan informasi penyajian ke sistem tata letak. KetikaAffectsArrange
,AffectsMeasure
, atauAffectsRender
diatur ketrue
dalam metadata properti dependensi dan perubahan nilai efektifnya, sistem properti WPF akan memulai permintaan untuk membatalkan validasi visual elemen untuk memicu penggalian ulang.Metadata yang memengaruhi tata letak elemen induk elemen, khususnya AffectsParentArrange bendera metadata dan AffectsParentMeasure . Contoh properti dependensi WPF yang mengatur bendera ini adalah FixedPage.Left dan Paragraph.KeepWithNext.
Metadata pewarisan nilai properti, khususnya Inherits bendera metadata dan OverridesInheritanceBehavior . Secara default, properti dependensi tidak mewarisi nilai. OverridesInheritanceBehavior memungkinkan jalur pewarisan juga melakukan perjalanan ke pohon visual, yang diperlukan untuk beberapa skenario komposit kontrol. Untuk informasi selengkapnya, lihat Pewarisan nilai properti.
Catatan
Istilah "mewarisi" dalam konteks nilai properti khusus untuk properti dependensi, dan tidak secara langsung terkait dengan jenis kode terkelola dan pewarisan anggota melalui jenis turunan. Dalam konteks properti dependensi, itu berarti bahwa elemen turunan dapat mewarisi nilai properti dependensi dari elemen induk.
Metadata pengikatan data, khususnya BindsTwoWayByDefault bendera metadata dan IsNotDataBindable . Secara default, properti dependensi dalam kerangka kerja WPF mendukung pengikatan satu arah. Pertimbangkan untuk mengatur pengikatan dua arah sebagai default untuk properti yang melaporkan status dan dapat dimodifikasi oleh tindakan pengguna, misalnya IsSelected. Selain itu, pertimbangkan untuk mengatur pengikatan dua arah sebagai default saat pengguna kontrol mengharapkan properti untuk mengimplementasikannya, misalnya TextBox.Text.
BindsTwoWayByDefault
hanya memengaruhi mode pengikatan default. Untuk mengedit arah aliran data pengikatan, atur Binding.Mode. Anda dapat menggunakanIsNotDataBindable
untuk menonaktifkan pengikatan data saat tidak ada kasus penggunaan untuk itu. Untuk informasi selengkapnya tentang pengikatan data, lihat Gambaran umum pengikatan data.Metadata penjurnalan, khususnya Journal bendera metadata. Nilai
Journal
default bendera hanyatrue
untuk beberapa properti dependensi, seperti SelectedIndex. Kontrol input pengguna harus mengaturJournal
bendera untuk properti yang nilainya menyimpan pilihan pengguna yang perlu disimpan. BenderaJournal
dibaca oleh aplikasi atau layanan yang mendukung jurnal, termasuk layanan jurnal WPF. Untuk informasi tentang menyimpan langkah-langkah navigasi, lihat Gambaran umum navigasi.
FrameworkPropertyMetadata berasal langsung dari UIPropertyMetadata, dan mengimplementasikan bendera yang dibahas di sini. Kecuali diatur secara khusus, FrameworkPropertyMetadata
bendera memiliki nilai false
default .
Membaca FrameworkPropertyMetadata
Untuk mengambil metadata untuk properti dependensi, panggil GetMetadata pengidentifikasi DependencyProperty . Panggilan GetMetadata
mengembalikan PropertyMetadata
objek. Jika Anda perlu mengkueri nilai metadata kerangka kerja yang dilemparkan PropertyMetadata
ke FrameworkPropertyMetadata.
Menentukan FrameworkPropertyMetadata
Saat mendaftarkan properti dependensi, Anda memiliki opsi untuk membuat dan menetapkan metadata ke properti tersebut. Objek metadata yang Anda tetapkan dapat berupa PropertyMetadata atau salah satu kelas turunannya, seperti FrameworkPropertyMetadata. Pilih FrameworkPropertyMetadata
properti dependensi yang mengandalkan API presentasi WPF dan executable untuk penyajian dan pengikatan data. Opsi yang lebih canggih adalah mendapatkan dari FrameworkPropertyMetadata
untuk membuat kelas pelaporan metadata kustom dengan lebih banyak bendera. Atau, Anda mungkin menggunakan UIPropertyMetadata untuk properti non-kerangka kerja yang memengaruhi penyajian UI.
Meskipun opsi metadata biasanya diatur selama pendaftaran properti dependensi baru, Anda dapat menentukan OverrideMetadata ulang dalam atau AddOwner panggilan. Saat mengambil alih metadata, selalu ambil alih dengan jenis metadata yang sama yang digunakan selama pendaftaran properti.
Karakteristik properti yang diekspos oleh FrameworkPropertyMetadata
terkadang disebut sebagai bendera. Jika Anda membuat FrameworkPropertyMetadata
instans, ada dua cara untuk mengisi nilai bendera:
Atur bendera pada instans jenis FrameworkPropertyMetadataOptions enumerasi.
FrameworkPropertyMetadataOptions
memungkinkan Anda menentukan bendera metadata dalam kombinasi BITWISE OR. Kemudian, buat instansFrameworkPropertyMetadata
menggunakan konstruktor yang memilikiFrameworkPropertyMetadataOptions
parameter, dan teruskan instans AndaFrameworkPropertyMetadataOptions
. Untuk mengubah bendera metadata setelah meneruskanFrameworkPropertyMetadataOptions
ke FrameworkPropertyMetadata konstruktor, ubah properti yang sesuai pada instans baruFrameworkPropertyMetadata
. Misalnya, jika Anda mengatur FrameworkPropertyMetadataOptions.NotDataBindable bendera, Anda dapat membatalkannya dengan mengatur FrameworkPropertyMetadata.IsNotDataBindable kefalse
.FrameworkPropertyMetadata
Buat instans menggunakan konstruktor yang tidak memilikiFrameworkPropertyMetadataOptions
parameter, lalu atur bendera yang berlaku Boolean padaFrameworkPropertyMetadata
. Atur nilai bendera sebelum mengaitkan instans AndaFrameworkPropertyMetadata
dengan properti dependensi, jika tidak, Anda akan mendapatkan InvalidOperationException.
Perilaku penimpaan metadata
Saat Anda mengambil alih metadata properti kerangka kerja, nilai metadata yang diubah mengganti atau digabungkan dengan nilai asli:
PropertyChangedCallbackUntuk , logika penggabungan default mempertahankan nilai sebelumnya
PropertyChangedCallback
dalam tabel, dan semuanya dipanggil pada perubahan properti. Urutan panggilan balik ditentukan oleh kedalaman kelas, di mana panggilan balik yang didaftarkan oleh kelas dasar dalam hierarki akan berjalan terlebih dahulu. Panggilan balik yang diwariskan hanya berjalan sekali, dan dimiliki oleh kelas yang menambahkannya ke dalam metadata.DefaultValueUntuk , nilai baru akan menggantikan nilai default yang ada. Jika Anda tidak menentukan
DefaultValue
dalam metadata penimpaan FrameworkPropertyMetadata dan jika yang ada memilikiInherits
set bendera, maka nilai default berasal dari leluhur terdekat yang ditentukanDefaultValue
dalam metadata.CoerceValueCallbackUntuk , nilai baru akan menggantikan nilai yang ada
CoerceValueCallback
. Jika Anda tidak menentukanCoerceValueCallback
dalam metadata penimpaan, nilai berasal dari leluhur terdekat dalam rantai warisan yang menentukanCoerceValueCallback
.Untuk
FrameworkPropertyMetadata
bendera yang tidak diwariskan, Anda dapat mengambil alih nilai defaultfalse
dengantrue
nilai . Namun, Anda hanya dapat mengambil alih nilai denganfalse
nilai untuk Inherits, , JournalOverridesInheritanceBehavior, dan SubPropertiesDoNotAffectRender.true
Catatan
Logika penggabungan default diimplementasikan oleh Merge metode . Anda dapat menentukan logika penggabungan kustom di kelas turunan yang mewarisi properti dependensi, dengan mengambil alih di kelas tersebut Merge
.
Lihat juga
.NET Desktop feedback