Bagikan melalui


Sumber Daya dan Kode

Gambaran umum ini berkonsentrasi pada bagaimana sumber daya Windows Presentation Foundation (WPF) dapat diakses atau dibuat menggunakan kode daripada sintaks Extensible Application Markup Language (XAML). Untuk informasi selengkapnya tentang penggunaan sumber daya umum dan sumber daya dari perspektif sintaks XAML, lihat Sumber Daya XAML.

Mengakses Sumber Daya dari Kode

Kunci yang mengidentifikasi sumber daya jika ditentukan melalui XAML juga digunakan untuk mengambil sumber daya tertentu jika Anda meminta sumber daya dalam kode. Cara paling sederhana untuk mengambil sumber daya dari kode adalah dengan memanggil FindResource atau TryFindResource metode dari objek tingkat kerangka kerja di aplikasi Anda. Perbedaan perilaku antara metode ini adalah apa yang terjadi jika kunci yang diminta tidak ditemukan. FindResource menimbulkan pengecualian; TryFindResource tidak akan menaikkan pengecualian tetapi mengembalikan null. Setiap metode mengambil kunci sumber daya sebagai parameter input, dan mengembalikan objek yang ditik secara longgar. Biasanya, kunci sumber daya adalah string, tetapi ada sesekali penggunaan nonstring; lihat bagian Menggunakan Objek sebagai Kunci untuk detailnya. Biasanya Anda akan mentransmisikan objek yang dikembalikan ke jenis yang diperlukan oleh properti yang Anda atur saat meminta sumber daya. Logika pencarian untuk resolusi sumber daya kode sama dengan kasus XAML referensi sumber daya dinamis. Pencarian sumber daya dimulai dari elemen panggilan, kemudian berlanjut ke elemen induk berturut-turut di pohon logis. Pencarian berlanjut dan seterusnya ke sumber daya aplikasi, tema, dan sumber daya sistem jika perlu. Permintaan kode untuk sumber daya akan memperhitungkan perubahan runtime bahasa umum dalam kamus sumber daya yang mungkin telah dibuat berikutnya ke kamus sumber daya yang dimuat dari XAML, dan juga untuk perubahan sumber daya sistem realtime.

Berikut ini adalah contoh kode singkat yang menemukan sumber daya berdasarkan kunci dan menggunakan nilai yang dikembalikan untuk mengatur properti, yang diimplementasikan sebagai Click penanganan aktivitas.

void SetBGByResource(object sender, RoutedEventArgs e)
{
  Button b = sender as Button;
  b.Background = (Brush)this.FindResource("RainbowBrush");
}
Private Sub SetBGByResource(ByVal sender As Object, ByVal e As RoutedEventArgs)
  Dim b As Button = TryCast(sender, Button)
  b.Background = CType(Me.FindResource("RainbowBrush"), Brush)
End Sub

Metode alternatif untuk menetapkan referensi sumber daya adalah SetResourceReference. Metode ini mengambil dua parameter: kunci sumber daya, dan pengidentifikasi untuk properti dependensi tertentu yang ada pada instans elemen tempat nilai sumber daya harus ditetapkan. Secara fungsional, metode ini sama dan memiliki keuntungan tidak memerlukan transmisi nilai yang dikembalikan.

Masih cara lain untuk mengakses sumber daya secara terprogram adalah dengan mengakses konten properti sebagai kamus Resources . Mengakses kamus yang terkandung oleh properti ini juga merupakan cara Anda dapat menambahkan sumber daya baru ke koleksi yang ada, periksa untuk melihat apakah nama kunci tertentu sudah diambil dalam koleksi, dan operasi kamus/koleksi lainnya. Jika Anda menulis aplikasi WPF sepenuhnya dalam kode, Anda juga dapat membuat seluruh koleksi dalam kode, menetapkan kunci ke dalamnya, dan kemudian menetapkan koleksi yang sudah selesai ke Resources properti elemen yang mapan. Ini akan dijelaskan di bagian berikutnya.

Anda dapat mengindeks dalam koleksi tertentu Resources , menggunakan kunci tertentu sebagai indeks, tetapi Anda harus menyadari bahwa mengakses sumber daya dengan cara ini tidak mengikuti aturan runtime normal resolusi sumber daya. Anda hanya mengakses koleksi tertentu. Pencarian sumber daya tidak akan melintas cakupan ke akar atau aplikasi jika tidak ada objek yang valid yang ditemukan di kunci yang diminta. Namun, pendekatan ini mungkin memiliki keunggulan performa dalam beberapa kasus justru karena cakupan pencarian kunci lebih dibatasi. ResourceDictionary Lihat kelas untuk detail selengkapnya tentang cara bekerja dengan kamus sumber daya secara langsung.

Membuat Sumber Daya dengan Kode

Jika Anda ingin membuat seluruh aplikasi WPF dalam kode, Anda mungkin juga ingin membuat sumber daya apa pun dalam aplikasi tersebut dalam kode. Untuk mencapai hal ini, buat instans baru ResourceDictionary , lalu tambahkan semua sumber daya ke kamus menggunakan panggilan berturut-turut ke ResourceDictionary.Add. Kemudian, gunakan ResourceDictionary dengan demikian dibuat untuk mengatur Resources properti pada elemen yang ada dalam cakupan halaman, atau Application.Resources. Anda juga dapat mempertahankan ResourceDictionary sebagai objek mandiri tanpa menambahkannya ke elemen. Namun, jika Anda melakukan ini, Anda harus mengakses sumber daya di dalamnya dengan kunci item, seolah-olah itu adalah kamus generik. ResourceDictionary Yang tidak dilampirkan ke properti elemen Resources tidak akan ada sebagai bagian dari pohon elemen dan tidak memiliki cakupan dalam urutan pencarian yang dapat digunakan oleh FindResource dan metode terkait.

Menggunakan Objek sebagai Kunci

Sebagian besar penggunaan sumber daya akan mengatur kunci sumber daya menjadi string. Namun, berbagai fitur WPF sengaja tidak menggunakan jenis string untuk menentukan kunci, sebaliknya parameter ini adalah objek. Kemampuan memiliki sumber daya yang di-key oleh objek digunakan oleh gaya WPF dan dukungan tema. Gaya dalam tema yang menjadi gaya default untuk kontrol yang tidak ditata lainnya masing-masing di-key oleh Type kontrol yang harus mereka terapkan. Dikunci berdasarkan jenis menyediakan mekanisme pencarian yang andal yang berfungsi pada instans default dari setiap jenis kontrol, dan jenis dapat dideteksi oleh pantulan dan digunakan untuk menata kelas turunan meskipun jenis turunan sebaliknya tidak memiliki gaya default. Anda dapat menentukan Type kunci untuk sumber daya yang ditentukan dalam XAML dengan menggunakan x:Type Markup Extension. Ekstensi serupa ada untuk penggunaan kunci nonstring lainnya yang mendukung fitur WPF, seperti ComponentResourceKey Markup Extension.

Baca juga