如何在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,但是这只允许我合并多个外部字典,而不是在本地定义更多的资源。

我一定错过了一些微不足道的东西?

应该提到的是:我将用户控件托pipe在WinForms项目中,因此将共享资源放在App.xaml中并不是一个真正的select。

我想到了。 解决scheme涉及合并字典,但具体必须是正确的,像这样:

 <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标记中。 所以这里的例子是不正确的。

使用合并字典 。

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

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

您可以在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>