ResourceDictionary Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menentukan repositori untuk sumber daya XAML, seperti gaya, yang digunakan aplikasi Anda. Anda menentukan sumber daya di XAML dan kemudian dapat mengambilnya di XAML menggunakan ekstensi markup {StaticResource} dan ekstensi markup {ThemeResource}. Anda juga dapat mengakses sumber daya dengan kode, tetapi itu kurang umum.
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class ResourceDictionary : DependencyObject, IIterable<IKeyValuePair<IInspectable, IInspectable const&>>, IMap<IInspectable, IInspectable const&>
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class ResourceDictionary : DependencyObject, IDictionary<object,object>, IEnumerable<KeyValuePair<object,object>>
Public Class ResourceDictionary
Inherits DependencyObject
Implements IDictionary(Of Object, Object), IEnumerable(Of KeyValuePair(Of Object, Object))
<ResourceDictionary>
oneOrMoreResources
</ResourceDictionary>
- or -
<frameworkElement>
<frameworkElement.Resources>
oneOrMoreResources
</frameworkElement.Resources>
</frameworkElement>
- Warisan
- Turunan
- Atribut
- Penerapan
-
IDictionary<Object,Object> IMap<IInspectable,IInspectable> IIterable<IKeyValuePair<K,V>> IEnumerable<KeyValuePair<K,V>> IEnumerable<KeyValuePair<Object,Object>> IIterable<IKeyValuePair<IInspectable,IInspectable>>
Keterangan
Kamus sumber daya adalah repositori untuk sumber daya XAML, seperti gaya, yang digunakan aplikasi Anda. Anda menentukan sumber daya di XAML dan kemudian dapat mengambilnya di XAML menggunakan ekstensi markup {StaticResource} dan ekstensi markup {ThemeResource}. Anda juga dapat mengakses sumber daya dengan kode, tetapi itu kurang umum. Anda dapat menggunakan sumber daya untuk memberlakukan bahwa nilai tertentu seperti warna kuas atau pengukuran piksel digunakan secara konsisten di seluruh aplikasi Anda. Untuk informasi selengkapnya tentang menggunakan kamus sumber daya secara efektif, lihat Referensi sumber daya ResourceDictionary dan XAML.
Penggunaan elemen ResourceDictionary
Jenis ini ResourceDictionary
digunakan sebagai nilai dua properti, FrameworkElement.Resources dan Application.Resources, yang penting untuk struktur keseluruhan aplikasi SDK Aplikasi Windows. File XAML yang Anda dapatkan dari templat proyek awal untuk aplikasi akan dimulai dengan nilai awal untuk FrameworkElement.Resources, dan file app.xaml mungkin dimulai dengan nilai awal untuk Application.Resources. Sumber daya apa yang ditentukan di sana bergantung pada templat awal proyek mana yang Anda gunakan.
XAML ini menunjukkan penggunaan properti FrameworkElement.Resources . Dalam hal ini FrameworkElement adalah Halaman. Tidak ada ResourceDictionary
subordinat elemen untuk Page.Resources
elemen properti, tetapi kehadirannya tersirat; untuk informasi selengkapnya lihat bagian "Catatan pada sintaks XAML" di bawah ini. XAML menempatkan Gaya ke ResourceDictionary
dalam dengan nilai atribut x:Key dari "TextBlockStyle1". Lebih jauh ke bawah di XAML, ekstensi markup {StaticResource} mereferensikan dalam kamus Style
sumber daya untuk memberikan nilai untuk properti Gaya dari elemen TextBlock .
Gaya seperti yang ditampilkan sebenarnya tidak menerapkan gaya apa pun ke TextBlock, tetapi Anda dapat menambahkan Style
properti di Microsoft Visual Studio. Anda kemudian dapat menggunakan Style
sumber daya sesering yang Anda suka di halaman untuk menegakkan keseragaman.
<Page
x:Class="ResourceDictionary_example.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:ResourceDictionary_example"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Page.Resources>
<Style x:Key="TextBlockStyle1" TargetType="TextBlock"/>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<TextBlock Style="{StaticResource TextBlockStyle1}" Text="TextBlock"/>
</Grid>
</Page>
XAML ini, dari file AppPage.xaml dari sampel AtomPub, menunjukkan penggunaan properti Application.Resources . XAML menempatkan dua elemen Gaya ke dalam kamus sumber daya, membuatnya tersedia di seluruh aplikasi.
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="AtomPub.App"
RequestedTheme="Light" >
<Application.Resources>
<ResourceDictionary>
<Style x:Key="TitleStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="#707070"/>
<Setter Property="FontFamily" Value="Segoe UI Light"/>
<Setter Property="FontSize" Value="16"/>
</Style>
<Style x:Key="H1Style" TargetType="TextBlock">
<Setter Property="Foreground" Value="#212121"/>
<Setter Property="FontFamily" Value="Segoe UI Semilight"/>
<Setter Property="FontSize" Value="26.667"/>
<Setter Property="Margin" Value="0,0,0,25"/>
</Style>
...
</ResourceDictionary>
</Application.Resources>
</Application>
XAML dari file MainPage.xaml ini menggunakan ekstensi markup {StaticResource} untuk mengakses gaya TitleStyle dan H1Style :
...
<!-- Header -->
<StackPanel x:Name="Header" Grid.Row="0">
<StackPanel Orientation="Horizontal">
...
<TextBlock Text="Windows SDK Samples" VerticalAlignment="Bottom" Style="{StaticResource TitleStyle}" TextWrapping="Wrap"/>
</StackPanel>
<TextBlock x:Name="FeatureName" Text="Add Feature Name" Style="{StaticResource H1Style}" TextWrapping="Wrap"/>
</StackPanel>
...
Anda dapat memperhitungkan sumber daya ke dalam file XAML mereka sendiri dengan menggunakan ResourceDictionary sebagai elemen akar file. Anda kemudian dapat menyertakan sumber daya tersebut dalam kamus sumber daya FrameworkElement.Resources atau Application.Resources . Untuk melakukan ini, Anda menggunakan properti ResourceDictionary.MergedDictionaries atau properti ResourceDictionary.ThemeDictionaries dari elemen ResourceDictionary.
File ini, Common/Styles1.xaml, mendefinisikan sumber daya Gaya menggunakan ResourceDictionary
sebagai elemen akar:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="TitleTextStyle" TargetType="TextBlock">
<Setter Property="FontFamily" Value="Segoe UI Light"/>
<Setter Property="FontSize" Value="16"/>
</Style>
<Style x:Key="HeaderTextStyle" TargetType="TextBlock">
<Setter Property="FontFamily" Value="Segoe UI Semilight"/>
<Setter Property="FontSize" Value="26.667"/>
<Setter Property="Margin" Value="0,0,0,25"/>
</Style>
...
</ResourceDictionary>
Sekarang misalkan ada file lain, Common/Styles2.xaml yang juga mendefinisikan sumber daya Gaya . XAML ini menunjukkan cara menggabungkan sumber daya dalam dua file tersebut menggunakan properti ResourceDictionary.MergedDictionaries untuk membuat kamus sumber daya Application.Resources . XAML juga mendefinisikan dua sumber daya Gaya lebih lanjut dan menggabungkannya dengan sumber daya dari dua file.
<Application
.... >
<Application.Resources>
<ResourceDictionary>
<Style x:Key="ErrorStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="DarkRed"/>
<Setter Property="FontFamily" Value="Segoe UI Semilight"/>
<Setter Property="FontSize" Value="15"/>
</Style>
<Style x:Key="StatusStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="Black"/>
<Setter Property="FontFamily" Value="Segoe UI Semilight"/>
<Setter Property="FontSize" Value="15"/>
</Style>
<ResourceDictionary.MergedDictionaries>
<!--
Styles that define common aspects of the platform look and feel
-->
<ResourceDictionary Source="Common/Styles1.xaml"/>
<ResourceDictionary Source="Common/Styles2.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Untuk informasi tentang bagaimana sumber daya kamus gabungan diselesaikan, lihat bagian "Kamus sumber daya gabungan" dari Referensi sumber daya ResourceDictionary dan XAML.
Properti x:Key
Di XAML, kunci untuk ResourceDictionary
item dideklarasikan dengan mengatur atribut x:Keypada elemen yang mewakili sumber daya XAML. Biasanya, jika Anda mencoba menempatkan elemen anak yang tidak memiliki nilai kunci ke dalam ResourceDictionary
, ini melemparkan pengecualian penguraian XAML atau pengecualian Windows Runtime. Kondisi pengecualian mungkin juga dicatat sebagai peringatan oleh permukaan desain XAML. Namun, ada tiga kasus penting di mana ResourceDictionary
elemen anak tidak akan memerlukan nilai atribut x:Key :
- Sumber daya Gaya dapat menggunakan nilai TargetType-nya sebagai kunci sumber daya implisit. Untuk informasi selengkapnya tentang cara kerja kunci implisit untuk gaya dan templat kontrol, lihat Kontrol gaya.
- Elemen
ResourceDictionary
dengan nilai Sumber yang mewakili nilai ResourceDictionary.MergedDictionaries tidak dapat memiliki atribut x:Key padaResourceDictionary
. Dalam setiap file kamus yang digabungkan, (yang direferensikan oleh URI sebagai Sumbernya) Anda memerlukan kunci untuk setiap sumber daya. - Atribut x:Name dapat digunakan alih-alih atribut x:Key, karena alasan warisan. Namun, atribut x:Name dengan sendirinya tidak mengaktifkan pencarian sumber daya XAML dari item tersebut. Konvensi identifikasi atribut x:Name digunakan untuk skenario tertentu seperti menentukan animasi papan cerita. Untuk informasi selengkapnya, lihat atribut x:Name.
Iterasi melalui ResourceDictionary
Anda dapat melakukan iterasi melalui ResourceDictionary
di C#. Dalam banyak kasus, seperti menggunakan foreach
sintaksis, pengkompilasi melakukan transmisi ini untuk Anda dan Anda tidak perlu mentransmisikan untuk IEnumerable
secara eksplisit. Jika Anda perlu mentransmisikan secara eksplisit, misalnya jika Anda ingin memanggil GetEnumerator, transmisikan ke IEnumerable dengan KeyValuePair<Object,Object>
batasan.
ResourceDictionary dan Microsoft Visual Studio
Microsoft Visual Studio menyediakan pilihan halaman Tambahkan Item Baru untuk kamus sumber daya. Gunakan opsi ini setiap kali Anda ingin menentukan kamus sumber daya XAML longgar baru, misalnya untuk berfungsi sebagai sumber untuk kamus gabungan. Microsoft Visual Studio juga menambahkan kamus sumber daya XAML yang longgar ke proyek setiap kali Anda menggunakan Tambahkan Item Baru untuk membuat kontrol templat. Kamus sumber daya ini menyediakan templat tema default. Microsoft Visual Studio mungkin membuat baru ResourceDictionary
untuk Anda di XAML jika Anda mengedit salinan gaya atau templat dan ResourceDictionary
untuk lokasi sumber daya yang Anda pilih (aplikasi, halaman, atau mandiri) belum ada.
Catatan tentang sintaks XAML
Perhatikan bahwa sintaks pengumpulan implisit XAML untuk ResourceDictionary
tidak menyertakan elemen objek untuk ResourceDictionary
. Ini adalah contoh sintaks pengumpulan implisit XAML; tag yang mewakili elemen koleksi dapat dihilangkan. Elemen yang ditambahkan sebagai item ke koleksi ditentukan sebagai elemen anak dari elemen properti dari properti yang jenis dasarnya mendukung kamus / peta Tambahkan metode.
Untuk kamus sumber daya gabungan, Anda perlu secara eksplisit mendeklarasikan ResourceDictionary
elemen objek, sehingga Anda juga dapat mendeklarasikan elemen properti ResourceDictionary.MergedDictionaries dan Sumber. Dengan demikian, ada minimal dua ResourceDictionary
elemen objek yang terlibat, dan Anda menggunakan sintaks ini.
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="uri"/>
...
</ResourceDictionary.MergedDictionaries>
...
</ResourceDictionary>
Dalam sintaks ini, bagian luar ResourceDictionary
adalah primer ResourceDictionary
. Bagian dalam ResourceDictionary
sedang ResourceDictionary
digabungkan.
Untuk penggunaan pengumpulan implisit, tempat penampung yang sesuai untuk properti FrameworkElement.Resources ditampilkan. Anda juga dapat menggunakan penggunaan koleksi implisit ini untuk properti Application.Resources , atau berpotensi untuk properti kustom yang menggunakan ResourceDictionary
sebagai jenis propertinya.
Jenis yang dapat dibagikan dan jenis UIElement
Kamus sumber daya adalah teknik untuk menentukan jenis dan nilai yang dapat dibagikan dari jenis ini di XAML. Tidak semua jenis atau nilai cocok untuk penggunaan dari ResourceDictionary
. Contoh jenis di mana berbagi didukung termasuk Gaya, subkelas FrameworkTemplate apa pun, jenis data intrinsik XAML, kuas, warna, dan transformasi. Untuk informasi selengkapnya tentang jenis mana yang dianggap dapat dibagikan, lihat Referensi sumber daya ResourceDictionary dan XAML. Umumnya, jenis turunan UIElement tidak dapat dibagikan kecuali berasal dari templat dan aplikasi templat pada instans kontrol tertentu. Tidak termasuk kasus templat, UIElement diharapkan hanya ada di satu tempat di pohon objek setelah dibuat, dan memiliki UIElement yang dapat dibagikan akan berpotensi melanggar prinsip ini.
Dalam praktiknya, sebagian besar sumber daya yang ResourceDictionary
ditentukan dalam akan menjadi salah satu dari ini:
- Mengontrol templat untuk kontrol, termasuk status visualnya.
- Gaya pendukung untuk bagian kontrol
- Gaya untuk elemen yang merupakan bagian dari UI aplikasi umum tetapi bukan kontrol, seperti TextBlock
- Templat data untuk kontrol dan panel yang menggunakan pengikatan data
- Nilai Brush tertentu, sebagian besar SolidColorBrush
- String atau konstanta lain yang tidak perlu dilokalkan (string dan konstanta yang perlu dilokalkan tidak boleh berada di ResourceDictionary; untuk informasi selengkapnya lihat Mulai Cepat: Menerjemahkan sumber daya UI)
Mengakses objek ResourceDictionary dalam kode
API yang digunakan kode Anda untuk mengakses sumber daya dalam ResourceDictionary bergantung pada bahasa pemrograman mana yang Anda gunakan:
- Untuk C# Anda menggunakan API yang mengimplementasikan IDictionary<TKey,TValue> dan IEnumerable. Misalnya, TryGetValue atau pengindeks Item .
- API yang bukan bagian dari dukungan pengumpulan, seperti Sumber, sama dalam semua bahasa.
Untuk informasi selengkapnya tentang cara menggunakan ResourceDictionary
dalam kode, lihat bagian "Menggunakan ResourceDictionary dari kode" dari referensi sumber daya ResourceDictionary dan XAML.
Sumber daya sistem
Beberapa sumber daya tema mereferensikan nilai sumber daya sistem sebagai sub-nilai yang mendasar. Sumber daya sistem adalah nilai sumber daya khusus yang tidak ditemukan dalam kamus sumber daya XAML apa pun. Nilai-nilai ini mengandalkan perilaku dalam dukungan Windows Runtime XAML untuk meneruskan nilai dari sistem itu sendiri, dan mewakilinya dalam bentuk yang dapat direferensikan oleh sumber daya XAML.
Konstruktor
ResourceDictionary() |
Menginisialisasi instans baru kelas ResourceDictionary . |
Properti
Dispatcher |
Selalu kembali |
DispatcherQueue |
|
MergedDictionaries |
Mendapatkan kumpulan kamus ResourceDictionary yang merupakan berbagai kamus sumber daya dalam kamus gabungan. |
Size |
Mendapatkan jumlah elemen yang terkandung dalam koleksi. |
Source |
Mendapatkan atau mengatur Pengidentifikasi Sumber Daya Seragam (URI) yang menyediakan lokasi sumber kamus sumber daya gabungan. |
ThemeDictionaries |
Mendapatkan kumpulan kamus sumber daya gabungan yang secara khusus dikuntah dan disusun untuk mengatasi skenario tema, misalnya menyediakan nilai tema untuk "HighContrast". |
Metode
Clear() |
Menghapus semua item dari ResourceDictionary ini. |
ClearValue(DependencyProperty) |
Menghapus nilai lokal properti dependensi. (Diperoleh dari DependencyObject) |
First() |
Mengembalikan iterator untuk item dalam koleksi. |
GetAnimationBaseValue(DependencyProperty) |
Mengembalikan nilai dasar apa pun yang ditetapkan untuk properti dependensi, yang akan berlaku dalam kasus di mana animasi tidak aktif. (Diperoleh dari DependencyObject) |
GetValue(DependencyProperty) |
Mengembalikan nilai efektif properti dependensi saat ini dari DependencyObject. (Diperoleh dari DependencyObject) |
GetView() |
Mengambil tampilan terhadap ResourceDictionary. |
HasKey(Object) |
Mengembalikan apakah ResourceDictionary memiliki entri dengan kunci yang diminta. |
Insert(Object, Object) |
Menambahkan entri baru ke ResourceDictionary. |
Lookup(Object) |
Mengembalikan nilai dari kunci yang diminta, jika ada entri dengan kunci tersebut. |
ReadLocalValue(DependencyProperty) |
Mengembalikan nilai lokal properti dependensi, jika nilai lokal ditetapkan. (Diperoleh dari DependencyObject) |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Mendaftarkan fungsi pemberitahuan untuk mendengarkan perubahan pada DependencyProperty tertentu pada instans DependencyObject ini. (Diperoleh dari DependencyObject) |
Remove(Object) |
Menghapus item tertentu dari ResourceDictionary. |
SetValue(DependencyProperty, Object) |
Mengatur nilai lokal properti dependensi pada DependencyObject. (Diperoleh dari DependencyObject) |
UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Membatalkan pemberitahuan perubahan yang sebelumnya terdaftar dengan memanggil RegisterPropertyChangedCallback. (Diperoleh dari DependencyObject) |
Berlaku untuk
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk