Bagikan melalui


Ekstensi Markup ComponentResourceKey

Menentukan dan mereferensikan kunci untuk sumber daya yang dimuat dari rakitan eksternal. Ini memungkinkan penelusuran sumber daya untuk menentukan jenis target di dalam rakitan, bukan kamus sumber daya eksplisit di dalam rakitan atau pada kelas.

Penggunaan Atribut XAML (kunci pengaturan, ringkas)

<object x:Key="{ComponentResourceKey {x:Type targetTypeName}, targetID}" ... />

Penggunaan Atribut XAML (kunci pengaturan, verbose)

<object x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}" ... />

Penggunaan Atribut XAML (meminta sumber daya, ringkas)

<object property="{DynamicResource {ComponentResourceKey {x:Type targetTypeName}, targetID}}" ... />

Penggunaan Atribut XAML (meminta sumber daya, verbose)

<object property="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type targetTypeName}, ResourceID=targetID}}" ... />

Nilai XAML

Nilai Deskripsi
targetTypeName Nama tipe runtime bahasa umum (CLR) publik yang ditentukan dalam kumpulan sumber daya.
targetID Kunci sumber daya Ketika sumber daya dicari, targetID akan dianalogikan dengan x:Key Directive sumber daya.

Komentar

Seperti yang terlihat pada penggunaan di atas, penggunaan ekstensi markup {ComponentResourceKey} ditemukan di dua tempat:

  • Definisi kunci dalam kamus sumber daya tema, seperti yang disediakan oleh penulis kontrol.

  • Mengakses sumber daya tema dari kumpulan assembly, saat Anda mengubah templat kontrol tetapi ingin menggunakan nilai properti yang berasal dari sumber daya yang disediakan oleh tema kontrol.

Untuk mereferensikan sumber daya komponen yang berasal dari tema, umumnya disarankan agar Anda menggunakan {DynamicResource} daripada {StaticResource}. Ini ditunjukkan dalam penggunaannya. {DynamicResource} disarankan karena tema itu sendiri dapat diubah oleh pengguna. Jika Anda ingin sumber daya komponen yang paling cocok dengan niat penulis kontrol untuk mendukung tema, Anda harus mengaktifkan referensi sumber daya komponen Anda menjadi dinamis juga.

TypeInTargetAssembly mengidentifikasi jenis yang ada di rakitan target tempat sumber daya benar-benar didefinisikan. ComponentResourceKey dapat didefinisikan dan digunakan secara independen tanpa mengetahui secara tepat di mana TypeInTargetAssembly didefinisikan, tetapi akhirnya harus menyelesaikan tipe melalui assemblies yang dirujuk.

Penggunaan umum untuk ComponentResourceKey adalah menentukan kunci yang kemudian diekspos sebagai anggota kelas. Untuk penggunaan ini, Anda menggunakan ComponentResourceKey konstruktor kelas, bukan ekstensi markup. Untuk informasi selengkapnya, lihat ComponentResourceKey, atau bagian "Menentukan dan Mereferensikan Kunci untuk Sumber Daya Tema" dari gambaran umum penulisan kontrol topik.

Untuk menetapkan kunci dan mereferensikan sumber daya kunci, sintaks atribut umumnya digunakan untuk ComponentResourceKey ekstensi markup.

Sintaks ringkas yang ditampilkan bergantung pada ComponentResourceKey tanda tangan konstruktor dan penggunaan parameter posisi ekstensi markup. Urutan di mana targetTypeName dan targetID diberikan penting. Sintaks verbose bergantung pada ComponentResourceKey konstruktor tanpa parameter, lalu mengatur TypeInTargetAssembly dan ResourceId dengan cara yang dianalogikan ke sintaks atribut sejati pada elemen objek. Dalam sintaks verbose, urutan properti diatur tidak penting. Hubungan dan mekanisme kedua alternatif ini (ringkas dan verbose) dijelaskan secara lebih rinci dalam topik Ekstensi Markup dan WPF XAML.

Secara teknis, nilai untuk targetID bisa menjadi objek apa pun, itu tidak harus menjadi string. Namun, penggunaan yang paling umum dalam WPF adalah menyelaraskan nilai targetID dengan formulir yang berupa string, di mana string tersebut valid di dalam Gramatika Nama Xaml.

ComponentResourceKey dapat digunakan dalam sintaks elemen objek. Dalam hal ini, menentukan nilai dari properti TypeInTargetAssembly dan ResourceId diperlukan untuk dengan benar menginisialisasi ekstensi.

Dalam implementasi pembaca WPF XAML, penanganan untuk ekstensi markup ini ditentukan oleh ComponentResourceKey kelas .

ComponentResourceKey adalah ekstensi markup. Ekstensi markup biasanya diimplementasikan ketika ada persyaratan untuk meloloskan nilai atribut menjadi selain nilai harfiah atau nama handler, dan persyaratannya lebih global daripada hanya menempatkan pengonversi jenis pada jenis atau properti tertentu. Semua ekstensi markup di XAML menggunakan { dan } karakter dalam sintaks atributnya, yang merupakan konvensi di mana prosesor XAML mengenali bahwa ekstensi markup harus memproses atribut . Untuk informasi selengkapnya, lihat Ekstensi Markup danWPF XAML .

Lihat juga