Saya telah mencoba mencari cara untuk mengatur file ResourceDictionary saya untuk digunakan kembali dan berbagi dengan anggota tim saya yang lain.
Saya terus menemukan "Generic.xaml", tetapi jika saya mencari MSDN untuk Generic.xaml atau hanya melakukan pencarian Google, saya hanya mendapatkan posting blog dan pertanyaan forum yang menyebutkannya - saya tidak bisa menemukan sesuatu yang benar-benar berwibawa dan jelas.
Apa perbedaan antara Generic.xaml dan MyRandomlyNamedResourceDictionary.xaml? Sepertinya demikian, saya harus merujuk ResourceDictionaries yang disimpan di perpustakaan dengan atribut Source. Misalnya,:
<Application.Resources>
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml"
</Application.Resources>
Jadi, apa keuntungan yang diberikan Generic.xaml sebenarnya? Apakah ada tujuan jika saya tidak mencoba memberikan beberapa "tampilan" aplikasi saya (yaitu, jika saya hanya punya satu tema)?
Jawaban:
Setiap Kontrol di WPF memiliki Gaya default yang menyediakan, antara lain, standar Kontrol
ControlTemplate
. WPF mencari gaya default di kamus sumber daya khusus di folder Tema di majelis yang sama dengan kontrol. Kunci untuk gaya default disediakan olehControl.DefaultStyleKey
properti dependensi, nilai default yang ditimpa di setiap sub-kelas Kontrol.Nama kamus sumber daya tergantung pada tema Windows saat ini misalnya pada Vista menggunakan tema Aero, kamus disebut Aero.NormalColor.xaml, pada XP menggunakan tema default itu adalah Luna.NormalColor.xaml. Jika gaya tidak ditemukan dalam kamus tema, itu terlihat di Generic.xaml yaitu untuk kontrol yang penampilannya tidak tergantung pada tema.
Ini hanya berlaku untuk kontrol kustom apa pun yang telah Anda tetapkan yaitu kelas yang berasal dari Kontrol, langsung atau tidak langsung. Anda dapat mengubah gaya default untuk kontrol standar dengan mengambil darinya dan memanggil
DefaultStyleKeyProperty.OverrideMetadata
konstruktor statis, tetapi Anda kemudian harus menyediakan gaya penuh termasuk ControlTemplate.Perhatikan bahwa Anda dapat memberi tahu WPF untuk mencari di perakitan eksternal untuk gaya default Anda dengan menggunakan atribut ThemeInfo. Majelis eksternal harus dinamai
<
YourAssembly>
.<
ThemeName>
.dll misalnya PresententationFramework.Aero.dll.sumber
Agar suatu
generic.xaml
file (case-sensitive) menjadi sesuatu yang istimewa, dua syarat harus dipenuhi:ThemeInfoAttribute
(biasanya diAssemblyInfo.cs
)Kemudian itu berfungsi sebagai lokasi pencarian standar untuk gaya default yang ingin Anda terapkan ke Kontrol Anda. Perhatikan juga bahwa untuk suatu style sebagai default, ia harus mendeklarasikan TargetType dan x: Key sebagai Type of Control yang akan ditata.
Jika Anda ingin menambahkan seluruh tema dan pengalihan tema ke aplikasi Anda, yang dilakukan dengan beberapa pengkodean, teknik ini hanya mendefinisikan kamus sumber daya default.
sumber
x:Key
dengan menulis<Button Style="{StaticResource MyButtonStyle}" />
? Apa yang terjadi jika ResourceDictionary berisi lebih dari satu Style yang TargetType-nya adalah "Tombol"? Terima kasih.h1 {color:#00ff00}
,?