В темах WPF - это просто набор файлов XAML, каждый из которых содержит ResourceDictionary , который содержит определения Style и Template , которые применяются к элементам управления, используемым в приложение. Файл темы может выглядеть так:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:uc="clr-namespace:MyApp.UserControls">
<!-- Standard look for MyUserControl -->
<Style x:Key="Standard" TargetType="{x:Type uc:MyUserControl}">
<Setter Property="Width" Value="22" />
<Setter Property="Height" Value="10" />
</Style>
</ResourceDictionary>
Поддержка тем в приложении WPF должна быть явно включена путем добавления следующего атрибута в сборку:
[assembly: ThemeInfo(
ResourceDictionary.None,
ResourceDictionaryLocation.SourceAssembly
)]
Это заставит WPF искать файл встроенного ресурса с именем themes \ generic.xaml , чтобы определить внешний вид элементов управления приложения по умолчанию.
Обратите внимание, что если тематические словари содержат отдельные файлы , то ресурсы сборки, стиля и шаблона приложения должны использовать составной ключ , который сообщает WPF, какая сборка содержит элемент управления что стиль / шаблон применяется к. Поэтому предыдущий пример должен быть изменен на:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:uc="clr-namespace:MyApp.UserControls;assembly=MyApp">
<!-- Standard look for MyUserControl in the MyApp assembly -->
<Style x:Key="{ComponentResourceKey {x:Type uc:MyUserControl}, Standard}">
<Setter Property="Width" Value="22" />
<Setter Property="Height" Value="10" />
</Style>
</ResourceDictionary>