Как объединить импортированные и локальные ресурсы в пользовательском элементе управления WPF
Я пишу несколько пользовательских элементов управления WPF, которые требуют как общих, так и отдельных ресурсов.
Я нашел синтаксис для загрузки ресурсов из отдельного файла ресурсов:
<UserControl.Resources>
<ResourceDictionary Source="ViewResources.xaml" />
</UserControl.Resources>
однако, когда я делаю это, я не могу также добавить ресурсы локально, как:
<UserControl.Resources>
<ResourceDictionary Source="ViewResources.xaml" />
<!-- Doesn't work: -->
<ControlTemplate x:Key="validationTemplate">
...
</ControlTemplate>
<style x:key="textBoxWithError" TargetType="{x:Type TextBox}">
...
</style>
...
</UserControl.Resources>
Я посмотрел на ResourceDictionary.MergedDictionaries, но это только позволяет мне объединить более одного внешнего словаря, а не определять дальнейшие ресурсы локально.
I должно быть, не хватает чего-то тривиального?
следует отметить: я размещаю свои пользовательские элементы управления в проекте WinForms, поэтому помещаю общие ресурсы в приложение.xaml-это не совсем вариант.
3 ответов:
Я понял. Решение включает в себя MergedDictionaries, но специфика должна быть в самый раз, как это:
<UserControl.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="ViewResources.xaml" /> </ResourceDictionary.MergedDictionaries> <!-- This works: --> <ControlTemplate x:Key="validationTemplate"> ... </ControlTemplate> <style x:key="textBoxWithError" TargetType="{x:Type TextBox}"> ... </style> ... </ResourceDictionary> </UserControl.Resources>локальные ресурсы должны быть вложены внутри тег ResourceDictionary. Так что пример здесь некорректно.
вы можете определить локальные ресурсы внутри раздела MergedDictionaries:
<UserControl.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <!-- import resources from external files --> <ResourceDictionary Source="ViewResources.xaml" /> <ResourceDictionary> <!-- put local resources here --> <Style x:key="textBoxWithError" TargetType="{x:Type TextBox}"> ... </Style> ... </ResourceDictionary> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </UserControl.Resources>
использовать MergedDictionaries.
Я получил следующий пример от здесь.
File1
2<ResourceDictionary xmlns=" http://schemas.microsoft.com/winfx/2006/xaml/presentation " xmlns:x=" http://schemas.microsoft.com/winfx/2006/xaml " > <Style TargetType="{x:Type TextBlock}" x:Key="TextStyle"> <Setter Property="FontFamily" Value="Lucida Sans" /> <Setter Property="FontSize" Value="22" /> <Setter Property="Foreground" Value="#58290A" /> </Style> </ResourceDictionary><ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="TextStyle.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary>
Comments