Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Topik ini menjelaskan sistem properti dependensi yang tersedia saat Anda menulis aplikasi WinUI dengan definisi XAML untuk UI.
Apa itu properti dependensi?
Properti dependensi adalah jenis properti khusus. Secara khusus ini adalah properti tempat nilai properti dilacak dan dipengaruhi oleh sistem properti khusus yang merupakan bagian dari WinUI.
Untuk mendukung properti dependensi, objek yang menentukan properti harus berupa DependencyObject (dengan kata lain kelas yang memiliki kelas dasar DependencyObject di suatu tempat dalam pewarisannya). Banyak jenis yang Anda gunakan untuk definisi UI Anda untuk aplikasi WinUI dengan XAML akan menjadi subkelas DependencyObject , dan akan mendukung properti dependensi. Namun, jenis apa pun yang berasal dari namespace Windows Runtime yang tidak memiliki "XAML" atas namanya tidak akan mendukung properti dependensi; properti jenis tersebut adalah properti biasa yang tidak akan memiliki perilaku dependensi sistem properti.
Tujuan properti dependensi adalah untuk menyediakan cara sistemik untuk menghitung nilai properti berdasarkan input lain (properti, peristiwa, dan status lain yang terjadi dalam aplikasi Anda saat berjalan). Input lain ini mungkin mencakup:
- Input eksternal seperti preferensi pengguna
- Mekanisme penentuan properti just-in-time seperti pengikatan data, animasi, dan storyboard
- Pola templat yang dapat digunakan beberapa kali seperti resource dan gaya
- Nilai yang diketahui melalui hubungan induk-turunan dengan elemen lain di pohon objek
Properti dependensi mewakili atau mendukung fitur tertentu dari model pemrograman untuk menentukan aplikasi WinUI dengan XAML untuk UI. Fitur-fitur ini meliputi:
- Pengikatan data
- Gaya
- Animasi bercerita
- Perilaku "PropertyChanged"; properti dependensi dapat diimplementasikan untuk menyediakan panggilan balik yang dapat menyebarluaskan perubahan ke properti dependensi lainnya
- Menggunakan nilai default yang berasal dari metadata properti
- Utilitas sistem properti umum seperti ClearValue dan pencarian metadata
Properti dependensi dan properti Windows Runtime
Properti dependensi memperluas fungsionalitas dasar Windows Runtime dengan menyediakan penyimpanan properti internal global yang menunjang semua properti dependensi dalam aplikasi saat runtime. Ini adalah alternatif untuk pola standar mendukung properti dengan bidang privat yang bersifat privat di kelas definisi properti. Anda dapat menganggap penyimpanan properti internal ini sebagai sekumpulan pengidentifikasi properti dan nilai yang ada untuk objek tertentu (selama itu adalah DependencyObject). Alih-alih diidentifikasi berdasarkan nama, setiap properti di toko diidentifikasi oleh instans DependencyProperty. Namun, sistem properti sebagian besar menyembunyikan detail implementasi ini: Anda biasanya dapat access properti dependensi dengan menggunakan nama sederhana (nama properti terprogram dalam bahasa kode yang Anda gunakan, atau nama atribut saat Anda menulis XAML).
Jenis dasar yang menyediakan dasar sistem properti dependensi adalah DependencyObject. DependencyObject menentukan metode untuk mengakses properti dependen, dan instans kelas turunan DependencyObject secara internal mendukung konsep penyimpanan properti yang kami sebutkan sebelumnya.
Berikut adalah penjumlahan terminologi yang kami gunakan dalam dokumentasi saat membahas properti dependensi:
| Istilah | Description |
|---|---|
| Properti dependensi | Sebuah properti yang terdapat pada pengidentifikasi DependencyProperty (lihat di bawah). Biasanya pengidentifikasi ini tersedia sebagai anggota statis dari kelas yang diturunkan dari DependencyObject. |
| Pengidentifikasi properti dependensi | Nilai konstan untuk mengidentifikasi properti, biasanya bersifat publik dan hanya dapat dibaca. |
| Pembungkus properti | Implementasi get dan set yang dapat dipanggil untuk properti Windows Runtime. Atau proyeksi definisi asli yang disesuaikan dengan bahasa tertentu. Implementasi pembungkus properti get memanggil GetValue, meneruskan pengidentifikasi properti dependensi yang relevan. |
Pembungkus properti bukan sekadar memudahkan pengguna, tetapi juga memperlihatkan properti dependensi ke proses, alat, atau proyeksi apa pun yang menggunakan definisi Windows Runtime untuk properti.
Contoh berikut mendefinisikan properti dependensi kustom seperti yang didefinisikan untuk C#, dan menunjukkan hubungan pengidentifikasi properti dependensi ke pembungkus properti.
public static readonly DependencyProperty LabelProperty = DependencyProperty.Register(
"Label",
typeof(string),
typeof(ImageWithLabelControl),
new PropertyMetadata(null)
);
public string Label
{
get { return (string)GetValue(LabelProperty); }
set { SetValue(LabelProperty, value); }
}
Nota
Contoh sebelumnya tidak dimaksudkan sebagai contoh lengkap tentang cara membuat properti dependensi kustom. Ini dimaksudkan untuk menunjukkan konsep properti dependensi bagi siapa pun yang lebih suka mempelajari konsep melalui kode. Untuk penjelasan yang lebih lengkap tentang contoh ini, lihat Properti dependensi kustom.
Prioritas nilai properti dependensi
Ketika Anda mendapatkan nilai properti dependensi, Anda mendapatkan nilai yang ditentukan untuk properti tersebut melalui salah satu input yang berpartisipasi dalam sistem properti Windows Runtime. Prioritas nilai properti dependensi ada sehingga sistem properti Windows Runtime dapat menghitung nilai dengan cara yang dapat diprediksi, dan penting bagi Anda untuk terbiasa dengan urutan prioritas dasar juga. Jika tidak, Anda mungkin menemukan diri Anda dalam situasi di mana Anda mencoba mengatur properti pada satu tingkat prioritas tetapi sesuatu yang lain (sistem, pemanggil pihak ketiga, beberapa kode Anda sendiri) mengaturnya di tingkat lain, dan Anda akan frustrasi mencoba mencari tahu nilai properti mana yang digunakan dan dari mana nilai tersebut berasal.
Misalnya, gaya dan templat dimaksudkan untuk menjadi titik awal bersama untuk menetapkan nilai properti dan tampilan kontrol. Tetapi pada instans kontrol tertentu Anda mungkin ingin mengubah nilainya versus nilai templat umum, seperti memberikan kontrol tersebut warna latar belakang yang berbeda atau string teks yang berbeda sebagai konten. Sistem properti Windows Runtime mempertimbangkan nilai lokal dengan prioritas yang lebih tinggi daripada nilai yang disediakan oleh gaya dan templat. Itu memungkinkan skenario memiliki nilai khusus aplikasi menimpa templat sehingga kontrol berguna untuk penggunaan Anda sendiri di antarmuka pengguna aplikasi.
Daftar prioritas properti dependensi
Berikut ini adalah urutan definitif yang digunakan sistem properti saat menetapkan nilai run-time untuk properti dependensi. Prioritas tertinggi tercantum terlebih dahulu. Anda akan menemukan penjelasan yang lebih rinci setelah daftar ini.
- Nilai animasi: Animasi aktif, animasi status visual, atau animasi dengan perilaku HoldEnd . Untuk memiliki efek praktis, animasi yang diterapkan ke properti harus lebih diutamakan daripada nilai dasar (tidak dianimasi), bahkan jika nilai tersebut ditetapkan secara lokal.
- Nilai lokal: Nilai lokal mungkin diatur melalui kenyamanan pembungkus properti, yang juga sama dengan pengaturan sebagai atribut atau elemen properti di XAML, atau dengan panggilan ke metode SetValue menggunakan properti instans tertentu. Jika Anda menetapkan nilai lokal dengan menggunakan pengikatan atau sumber daya statis, masing-masing bertindak lebih diutamakan seolah-olah nilai lokal ditetapkan, dan pengikatan atau referensi sumber daya dihapus jika nilai lokal baru ditetapkan.
- Properti templat: Elemen memiliki ini jika dibuat sebagai bagian dari templat (dari ControlTemplate atau DataTemplate).
- Penentu gaya: Nilai dari Setter dalam gaya yang berasal dari sumber daya halaman atau aplikasi.
- Nilai default: Properti dependensi dapat memiliki nilai default sebagai bagian dari metadatanya.
Properti templat
Properti templat sebagai item prioritas tidak berlaku untuk properti elemen apa pun yang Anda deklarasikan langsung di markup halaman XAML. Konsep properti yang di-template hanya ada untuk objek yang dibuat ketika WinUI menerapkan templat XAML ke elemen UI dan dengan demikian menentukan visualnya.
Semua properti yang diatur dari templat kontrol memiliki nilai semacam itu. Nilai-nilai ini hampir seperti sekumpulan nilai default yang diperluas untuk kontrol dan sering dikaitkan dengan nilai yang dapat Anda reset nanti dengan mengatur nilai properti secara langsung. Dengan demikian nilai yang ditetapkan templat harus dapat dibedakan dari nilai lokal yang sebenarnya, sehingga nilai lokal baru dapat menimpanya.
Nota
Dalam beberapa kasus, templat mungkin menggantikan bahkan nilai lokal, jika templat gagal mengekspos referensi ekstensi markup {TemplateBinding} untuk properti yang seharusnya dapat diubah pada instans. Ini biasanya dilakukan hanya jika properti benar-benar tidak dimaksudkan untuk diatur pada instans, misalnya jika hanya relevan dengan perilaku visual dan templat dan bukan untuk fungsi yang dimaksudkan atau logika runtime kontrol yang menggunakan templat.
Pengikatan dan prioritas
Operasi pengikatan memiliki prioritas yang sesuai untuk cakupan apa pun yang digunakan. Misalnya, {Binding} yang diterapkan ke nilai lokal bertindak sebagai nilai lokal, dan ekstensi markup {TemplateBinding} untuk setter properti berlaku seperti yang dilakukan setter gaya. Karena binding harus menunggu hingga run-time untuk mendapatkan nilai dari sumber data, proses penentuan prioritas nilai properti untuk properti apa pun juga berlanjut hingga run-time.
Pengikatan tidak hanya beroperasi pada prioritas yang sama dengan nilai lokal, mereka benar-benar adalah nilai lokal, di mana pengikatan adalah tempat penampung untuk nilai yang ditangguhkan. Jika Anda memiliki pengikatan untuk nilai properti, dan Anda menetapkan nilai lokal saat waktu berjalan, maka hal itu akan sepenuhnya menggantikan pengikatan tersebut. Demikian pula, jika Anda memanggil SetBinding untuk menentukan pengikatan yang hanya muncul pada run-time, Anda mengganti nilai lokal apa pun yang mungkin telah Anda terapkan di XAML atau dengan kode yang dijalankan sebelumnya.
Animasi yang dirancang dengan storyboard dan nilai dasar
Animasi storyboarding bertindak berdasarkan konsep nilai dasar. Nilai dasar adalah nilai yang ditentukan oleh sistem properti menggunakan prioritasnya, tetapi menghilangkan langkah terakhir mencari animasi. Misalnya, nilai dasar mungkin berasal dari templat kontrol, atau mungkin berasal dari pengaturan nilai lokal pada instans kontrol. Bagaimanapun, menerapkan animasi akan menimpa nilai dasar ini dan menerapkan nilai animasi selama animasi Anda tetap berjalan.
Untuk properti animasi, nilai dasar masih dapat berpengaruh pada perilaku animasi, jika animasi tersebut tidak secara eksplisit menentukan Dari dan Ke, atau jika animasi mengembalikan properti ke nilai dasarnya ketika selesai. Dalam kasus ini, setelah animasi tidak lagi berjalan, sisa prioritas digunakan lagi.
Namun, animasi yang menentukan To dengan perilaku HoldEnd dapat mengesampingkan nilai lokal hingga animasi dihentikan, bahkan ketika secara visual tampaknya diberhentikan. Secara konseptual ini seperti animasi yang berjalan selamanya bahkan jika tidak ada animasi visual di UI.
Beberapa animasi dapat diterapkan ke satu properti. Masing-masing animasi ini mungkin telah didefinisikan untuk menggantikan nilai dasar yang berasal dari titik yang berbeda dalam nilai prioritas. Namun, semua animasi ini akan berjalan secara bersamaan saat runtime, dan itu sering berarti bahwa mereka harus menggabungkan nilai-nilai mereka karena setiap animasi memiliki pengaruh yang sama pada nilai tersebut. Ini tergantung pada persis bagaimana animasi didefinisikan, dan jenis nilai yang sedang dianimasikan.
Untuk informasi selengkapnya, lihat Animasi Storyboard.
Nilai baku
Menetapkan nilai default untuk properti dependensi dengan nilai PropertyMetadata dijelaskan secara lebih rinci dalam topik Properti dependensi kustom .
Properti dependensi masih memiliki nilai default meskipun nilai default tersebut tidak secara eksplisit ditentukan dalam metadata properti tersebut. Kecuali telah diubah oleh metadata, nilai default untuk properti dependensi Windows Runtime umumnya adalah salah satu dari yang berikut ini:
- Properti yang menggunakan objek run-time atau jenis Objek dasar ( jenis referensi) memiliki nilai default null. Misalnya, DataContext adalah null hingga sengaja diatur, atau diwariskan.
- Properti yang menggunakan nilai dasar seperti angka atau nilai Boolean ( jenis nilai) menggunakan default yang diharapkan untuk nilai tersebut. Misalnya, 0 untuk bilangan bulat dan angka floating-point, false untuk Boolean.
- Properti yang menggunakan struktur Windows Runtime memiliki nilai default yang diperoleh dengan memanggil konstruktor default implisit struktur tersebut. Konstruktor ini menggunakan default untuk setiap bidang nilai dasar struktur. Misalnya, default untuk nilai Titik diinisialisasi dengan nilai X dan Y-nya sebagai 0.
- Properti yang menggunakan enumerasi memiliki nilai default dari anggota pertama yang ditentukan dalam enumerasi tersebut. Periksa referensi untuk enumerasi tertentu untuk melihat apa nilai defaultnya.
- Properti yang menggunakan string (System.String untuk .NET, Platform::String untuk C++/CX) memiliki nilai default string kosong ("").
- Properti koleksi biasanya tidak diimplementasikan sebagai properti dependensi, karena alasan yang dibahas lebih lanjut dalam topik ini. Tetapi jika Anda menerapkan properti koleksi kustom dan Anda ingin agar properti tersebut menjadi properti dependensi, pastikan untuk menghindari singleton yang tidak disengaja seperti yang dijelaskan di dekat akhir dari Custom Dependency Properties.
Fungsionalitas properti yang disediakan oleh properti dependensi
Pengikatan data
Properti dependensi dapat memiliki nilai yang ditetapkan melalui penerapan pengikatan data. Pengikatan data menggunakan sintaks ekstensi markup {Binding} dalam XAML, {x:Bind} atau kelas Binding dalam kode. Untuk properti yang terikat dengan data, penentuan nilai properti akhir diundur sampai waktu eksekusi. Pada saat itu nilai diperoleh dari sumber data. Peran yang dimainkan sistem properti dependensi di sini adalah memfasilitasi perilaku tempat penampung untuk operasi seperti memuat XAML ketika nilai belum diketahui, dan kemudian menyediakan nilai selama eksekusi melalui interaksi dengan mesin pengikatan data Windows Runtime.
Contoh berikut mengatur nilai Teks untuk elemen TextBlock , menggunakan pengikatan di XAML. Pengikatan menggunakan konteks data yang diwariskan dan sumber data objek. (Tidak satu pun dari ini ditampilkan dalam contoh yang dipersingkat; untuk sampel yang lebih lengkap yang menunjukkan konteks dan sumber, lihat Pengikatan data secara mendalam.)
<Canvas>
<TextBlock Text="{Binding Team.TeamName}"/>
</Canvas>
Anda juga dapat membuat pengikatan menggunakan kode daripada XAML. Lihat SetBinding.
Nota
Pengikatan seperti ini diperlakukan sebagai nilai lokal untuk tujuan prioritas nilai properti dependensi. Jika Anda menetapkan nilai lokal lain untuk properti yang awalnya memiliki nilai Binding, Anda akan menimpa pengikatan tersebut sepenuhnya, bukan hanya nilai run-time yang terikat. {x:Bind} Pengikatan diimplementasikan menggunakan kode yang dihasilkan yang akan menetapkan nilai lokal untuk properti . Jika Anda menetapkan nilai lokal untuk properti yang menggunakan {x:Bind}, maka nilai tersebut akan diganti saat pengikatan dievaluasi berikutnya, seperti ketika mengamati perubahan properti pada objek sumbernya.
Mengikat sumber, mengikat target, peran FrameworkElement
Untuk menjadi sumber pengikatan, properti tidak perlu menjadi properti dependensi; Anda umumnya dapat menggunakan properti apa pun sebagai sumber pengikatan, meskipun ini tergantung pada bahasa pemrograman Anda dan masing-masing memiliki kasus tepi tertentu. Namun, untuk menjadi target ekstensi markup {Binding} atau Pengikatan, properti tersebut harus menjadi properti dependensi. {x:Bind} tidak memiliki persyaratan ini karena menggunakan kode yang dihasilkan untuk menerapkan nilai pengikatannya.
Jika Anda membuat pengikatan dalam kode, perhatikan bahwa API SetBinding hanya ditentukan untuk FrameworkElement. Namun, Anda dapat membuat definisi pengikatan menggunakan BindingOperations sebagai gantinya, dan dengan demikian mereferensikan properti DependencyObject apa pun.
Untuk kode atau XAML, ingatlah bahwa DataContext adalah properti FrameworkElement . Dengan menggunakan bentuk warisan properti induk-anak (biasanya dibuat dalam markup XAML), sistem pengikatan dapat menyelesaikan DataContext yang ada pada elemen induk. Pewarisan ini dapat dievaluasi meskipun objek anak (yang memiliki properti target) bukan FrameworkElement dan karenanya tidak memiliki nilai DataContext sendiri. Namun, elemen induk yang diwariskan harus berupa FrameworkElement untuk mengatur dan menahan DataContext. Atau, Anda harus menentukan pengikatan sehingga dapat berfungsi dengan nilai null untuk DataContext.
Pengikatan kabel bukan satu-satunya hal yang diperlukan untuk sebagian besar skenario pengikatan data. Agar pengikatan satu arah atau dua arah efektif, properti sumber harus mendukung pemberitahuan perubahan yang disebarkan ke sistem pengikatan dan dengan demikian target. Untuk sumber pengikatan kustom, ini berarti bahwa properti harus merupakan properti dependensi, atau objek harus mendukung INotifyPropertyChanged. Koleksi harus mendukung INotifyCollectionChanged. Kelas tertentu mendukung antarmuka ini dalam implementasinya sehingga berguna sebagai kelas dasar untuk skenario pengikatan data; contoh kelas seperti itu adalah ObservableCollection<T>. Untuk informasi selengkapnya tentang pengikatan data dan bagaimana pengikatan data terkait dengan sistem properti, lihat Pengikatan data secara mendalam.
Nota
Jenis yang tercantum di sini mendukung sumber data Microsoft .NET. Sumber data C++/CX menggunakan antarmuka yang berbeda untuk pemberitahuan perubahan atau perilaku yang dapat diamati, lihat Pengikatan data secara mendalam.
Gaya dan templat
Gaya dan templat adalah dua skenario untuk properti yang didefinisikan sebagai properti dependensi. Gaya berguna untuk mengatur properti yang menentukan UI aplikasi. Gaya didefinisikan sebagai sumber daya di XAML, baik sebagai entri dalam koleksi Sumber Daya , atau dalam file XAML terpisah seperti kamus sumber daya tema. Gaya berinteraksi dengan sistem properti karena di dalamnya terdapat setter untuk properti. Properti terpenting di sini adalah properti Control.Template dari Kontrol: properti ini mendefinisikan sebagian besar tampilan visual dan status visual untuk Kontrol. Untuk informasi selengkapnya tentang gaya, dan beberapa contoh XAML yang menentukan Gaya dan menggunakan setter, lihat Kontrol gaya.
Nilai yang berasal dari gaya atau templat adalah nilai yang ditangguhkan, mirip dengan pengikatan. Ini agar pengguna kontrol dapat membuat ulang kontrol templat atau menentukan ulang gaya. Itulah mengapa setter properti dalam gaya hanya dapat bekerja pada properti dependensi, bukan pada properti biasa.
Animasi bercerita
Anda dapat menganimasikan nilai properti dependensi menggunakan animasi storyboard. Animasi papan cerita di Windows Runtime bukan hanya dekorasi visual. Lebih berguna untuk menganggap animasi sebagai teknik mesin keadaan yang dapat mengatur nilai properti individual atau semua properti dan visual dari sebuah kontrol, dan mengubah nilai-nilai ini dari waktu ke waktu.
Untuk dianimasikan, properti target animasi harus merupakan properti dependensi. Selain itu, untuk dianimasikan, jenis nilai properti target harus didukung oleh salah satu jenis animasi turunan Garis Waktu yang ada. Nilai Warna, Ganda , dan Titik dapat dianimasikan menggunakan teknik interpolasi atau keyframe. Sebagian besar nilai lain dapat dianimasikan menggunakan bingkai kunci Objek diskrit.
Ketika sebuah animasi diterapkan dan sedang berjalan, nilai yang dianimasikan memiliki prioritas lebih tinggi daripada nilai lain (seperti nilai lokal) yang dimiliki properti tersebut. Animasi juga memiliki perilaku HoldEnd opsional yang dapat menyebabkan animasi diterapkan ke nilai properti meskipun animasi secara visual tampaknya dihentikan.
Prinsip mesin status diwujudkan oleh penggunaan animasi storyboarded sebagai bagian dari model status VisualStateManager untuk kontrol. Untuk informasi selengkapnya tentang animasi storyboarded, lihat Animasi storyboarded. Untuk informasi selengkapnya tentang VisualStateManager dan menentukan status visual untuk kontrol, lihat Animasi storyboarded untuk status visual atau Templat kontrol.
Perilaku yang berubah karena perubahan properti
Perubahan perilaku properti adalah asal-usul dari bagian "dependensi" dalam terminologi properti dependensi. Mempertahankan nilai yang valid untuk properti ketika properti lain dapat memengaruhi nilai properti pertama adalah masalah pengembangan yang sulit dalam banyak kerangka kerja. Dalam sistem properti Windows Runtime, setiap properti dependensi dapat menentukan panggilan balik yang dipanggil setiap kali nilai propertinya berubah. Panggilan balik ini dapat digunakan untuk memberi tahu atau mengubah nilai properti terkait, secara umum sinkron. Banyak properti dependensi yang ada memiliki perilaku perubahan properti. Anda juga dapat menambahkan fungsi panggilan balik serupa ke properti dependensi kustom, dan mengimplementasikan fungsi perubahan properti Anda sendiri. Lihat Properti dependensi kustom untuk contoh.
Windows 10 memperkenalkan metode RegisterPropertyChangedCallback. Ini memungkinkan kode aplikasi untuk mendaftar pemberitahuan perubahan ketika properti dependensi yang ditentukan diubah pada instans DependencyObject.
Nilai default dan ClearValue
Properti dependensi dapat memiliki nilai default yang didefinisikan sebagai bagian dari metadata propertinya. Untuk properti dependensi, nilai defaultnya tidak menjadi tidak relevan setelah properti ditetapkan pertama kali. Nilai default mungkin akan diterapkan lagi pada saat run-time setiap kali ketentuan lain dalam prioritas nilai menghilang. (Prioritas nilai properti dependensi dibahas di bagian berikutnya.) Misalnya, Anda mungkin sengaja menghapus nilai gaya atau animasi yang berlaku untuk properti, tetapi Anda ingin nilainya menjadi default yang wajar setelah Anda melakukannya. Nilai default properti dependensi dapat memberikan nilai ini, tanpa perlu secara khusus menetapkan nilai setiap properti sebagai langkah tambahan.
Anda dapat dengan sengaja mengatur properti ke nilai default bahkan setelah Anda mengaturnya dengan nilai lokal. Untuk mengatur ulang nilai ke setelan default lagi, dan juga memungkinkan peserta lain dalam urutan prioritas yang dapat menggantikan setelan default tetapi tidak menggantikan nilai lokal, panggil metode ClearValue (acu properti yang akan dihapus sebagai parameter metode). Anda tidak selalu ingin properti menggunakan nilai default secara harfiah, tetapi menghapus nilai lokal dan kembali ke nilai default mungkin akan mengaktifkan item lain yang memiliki prioritas yang ingin Anda tindaklanjuti sekarang, seperti menggunakan nilai yang berasal dari setter gaya dalam templat kontrol.
DependencyObject dan threading
Semua instance DependencyObject harus dibuat pada thread UI yang terkait dengan Jendela saat ini yang dijalankan oleh aplikasi WinUI. Meskipun setiap DependencyObject harus dibuat pada utas UI utama, objek dapat diakses menggunakan referensi dispatcher dari utas lain, dengan mengakses properti DispatcherQueue . Kemudian Anda dapat memanggil metode seperti TryEnqueue dan menjalankan kode Anda dalam aturan pembatasan utas pada utas UI.
Nota
Untuk informasi selengkapnya tentang perbedaan antara UWP dan WinUI 3 untuk Windows App SDK, lihat migrasi fungsionalitas Threading.
Aspek threading DependencyObject relevan karena umumnya berarti bahwa hanya kode yang berjalan pada utas UI yang dapat mengubah atau bahkan membaca nilai properti dependensi. Masalah threading biasanya dapat dihindari dalam kode UI khas yang memanfaatkan dengan benar pola asinkron dan utas pekerja latar belakang. Anda biasanya hanya mengalami masalah utas terkait DependencyObject jika Anda mendefinisikan jenis DependencyObject Anda sendiri dan Anda mencoba menggunakannya untuk sumber data atau skenario lain di mana DependencyObject belum tentu sesuai.
Topik terkait
Materi konseptual
- Properti dependensi kustom
- Gambaran umum properti terlampir
- Pengikatan data secara mendalam
- Animasi yang Dibuat dengan Storyboard
API yang terkait dengan properti dependensi
Windows developer