Я пытаюсь применить тему к куче проектов wpf. Существует одна сборка, содержащая generic.xaml и различные приложения. Насколько я понимаю, я не могу использовать атрибут ThemeInfo с ResourceDictionaryLocation.ExternalLocation, поскольку имя должно совпадать с именем моей программы, но у меня более одной программы ...
Так что я искал и обнаружил, что мне нужно только включить словарь как MergedDictionary в app.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/ClassLibrary1;component/Themes/generic.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Это в основном работает. Но если я использую стиль для элементов управления, он больше не будет применять стиль generic.xaml:
generic.xaml в ClassLibrary1.dll
<ResourceDictionary x:Class="ClassLibrary1.Themes.generic"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type Button}">
<Setter Property="Background"
Value="Black" />
</Style>
Окно в программе
<Window x:Class="Theming.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="Button"
x:Key="ButtonGreenTextStyle">
<Setter Property="Foreground"
Value="Green" />
</Style>
</Window.Resources>
<Grid>
<Button Style="{DynamicResource ButtonGreenTextStyle}" Content="Test" />
</Grid>
</Window>
Что мне нужно сделать, так это то, что WPF будет понимать стиль в моем generic.xaml как базовый стиль для всех кнопок (я знаю, что мне также придется написать ControlTemplate; приведенный выше код просто для простоты)