Как объединить импортированные и локальные ресурсы в пользовательском элементе управления 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-это не совсем вариант.

646   3  

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

<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>
2
   <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
          <ResourceDictionary Source="TextStyle.xaml" />
        </ResourceDictionary.MergedDictionaries>
      </ResourceDictionary> 

Comments

    Ничего не найдено.