Стилизация пользовательского элемента управления в WPF из другой сборки
-
20-09-2019 - |
Вопрос
У меня есть пользовательский элемент управления WPF, определенный в сборке приложения.Я пытаюсь стилизовать пользовательский элемент управления на основе стилей в другой сборке (скин или тема).Я не хочу, чтобы сборка темы / обложки, которая содержит resourcedictionary со всеми стилями, ссылалась на сборку приложения.Есть ли какой-нибудь способ сделать это?Например.
Сборка приложения WPF
MyUserControl.xaml <- Пользовательский контроль WPF
Тематическая Сборка
MyStyles.xaml <- Словарь ресурсов WPF
Я предполагаю, что могу использовать
<Style x:Key="MyStyle">
<Setter Property="Background" Value="Red" />
</Style>
в ресурсном справочнике MyStyles.xaml и используйте:
<l:MyUserControl Name="control" Style="{StaticResource MyStyle}" />
в любом окне, которое использует MyUserControl.xaml в сборке WPFApplication
Однако я бы предпочел настроить таргетинг на пользовательский элемент управления в MyStyles.xaml resourcedictionary:
<Style TargetType="{x:Type l:MyUserControl}" x:Key="MyStyle">
<Setter Property="Background" Value="Red" />
</Style>
Возможно ли это??
Решение
Да, вы можете это сделать. Проверьте этот пост SO где я показываю, как это сделать программно.Я делал это с ControlTemplates, но то же самое относится и к стилям.
Чтобы сделать это декларативно, может быть проще, вам, возможно, придется программно объединить ваши resourcedictionaries, объявить правильные StaticResources и пространства имен в вашем xaml, а затем просто сослаться на нужный стиль / шаблон.