Bagikan melalui


Sumber daya dalam kode (WPF .NET)

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

Mengakses sumber daya dari kode

Kunci yang mengidentifikasi sumber daya yang ditentukan 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 terkadang ada penggunaan nonstring. Logika pencarian untuk resolusi sumber daya kode sama dengan kasus XAML referensi sumber daya dinamis. Pencarian sumber daya dimulai dari elemen panggilan, kemudian berlanjut melalui elemen induk 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 dengan benar pada sumber daya yang terjadi selama runtime.

Contoh kode berikut menunjukkan Click penanganan aktivitas yang menemukan sumber daya menurut kunci, dan menggunakan nilai yang dikembalikan untuk mengatur properti.

private void myButton_Click(object sender, RoutedEventArgs e)
{
    Button button = (Button)sender;
    button.Background = (Brush)this.FindResource("RainbowBrush");
}
Private Sub myButton_Click(sender As Object, e As RoutedEventArgs)
    Dim buttonControl = DirectCast(sender, Button)
    buttonControl.Background = DirectCast(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 . Kamus sumber daya digunakan untuk menambahkan sumber daya baru ke koleksi yang ada, periksa untuk melihat apakah nama kunci tertentu sudah digunakan oleh koleksi, dan operasi lainnya. Jika Anda menulis aplikasi WPF sepenuhnya dalam kode, Anda juga dapat membuat seluruh koleksi dalam kode, menetapkan sumber daya ke dalamnya. Koleksi kemudian dapat ditetapkan ke Resources properti elemen . Ini dijelaskan di bagian berikutnya.

Anda dapat mengindeks dalam koleksi tertentu Resources , menggunakan kunci tertentu sebagai indeks. Sumber daya yang diakses dengan cara ini tidak mengikuti aturan runtime normal resolusi sumber daya. Anda hanya mengakses koleksi tertentu. Pencarian sumber daya tidak melintasi cakupan sumber daya ke root 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. Untuk informasi selengkapnya tentang cara bekerja dengan kamus sumber daya secara langsung, lihat ResourceDictionary kelas .

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, tetapkan yang dibuat ResourceDictionary 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 menggunakan jenis objek sebagai kunci alih-alih string. Kemampuan memiliki sumber daya yang di-key oleh jenis objek digunakan oleh gaya WPF dan dukungan tema. Gaya dan tema yang menjadi default untuk kontrol yang tidak ditata lainnya masing-masing di-key oleh Type kontrol yang harus mereka terapkan.

Menjadi kunci berdasarkan jenis menyediakan mekanisme pencarian yang andal yang berfungsi pada instans default dari setiap jenis kontrol. Jenis dapat dideteksi oleh refleksi 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.

Untuk informasi selengkapnya, lihat Gaya, DataTemplates, dan kunci implisit.

Baca juga