如何在WPF用户控制进口和本地资源相结合(How to combine imported and l

2019-07-03 18:11发布

我正在写需要独立以及共用资源几个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,但只让我合并多个外部字典,而不是本地定义更多的资源。

我一定是失去了一些东西小事?

应该提到:我在主持一个WinForms项目我的用户控件,所以把共享资源中的App.xaml是不是一个真正的选择。

Answer 1:

我想到了。 该解决方案包括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中标签 。 因此,例如这里是不正确。



Answer 2:

您可以定义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>


Answer 3:

使用MergedDictionaries 。

从我得到了下面的例子在这里。

文件1

<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> 


文章来源: How to combine imported and local resources in WPF user control