在WPF中,如何引用在不同XAML文件中定义的静态资源?

7
在WPF中,我应该如何引用在不同XAML文件中定义的静态资源?这些文件位于同一项目中。
2个回答

8

另一个XAML文件需要是一个资源字典。您可以使用当前ResourceDictionary的MergedDictionaries属性将其合并到当前文件中。请参见MSDN上的合并资源字典。他们的示例:

<Page.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="myresourcedictionary.xaml"/>
      <ResourceDictionary Source="myresourcedictionary2.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Page.Resources>

然后在该页面对象中,您可以引用myresourcedictionary.xamlmyresourcedictionary2.xaml中定义的静态资源。


这只在应用程序资源的合并字典中才能正常工作。我创建了一个名为“Controls”的字典(包含所有包含我的控件样式的字典),将其添加到了应用程序的合并资源中,但是静态资源在样式文件之间无法解析。但是当我移除了中间人(Controls)后,它就正常工作了。我猜想XAML在某些情况下无法扫描合并字典的层次结构,而不处理应用程序的根字典。 - REghZY

3
“不同的XAML文件”可能意味着几种不同的事情:
- App.xaml:资源会自动包含在任何打开的内容的资源树中,因此您无需做任何额外的工作。 - Window或Page.xaml:资源可以被对象实例的任何子代访问,例如在窗口中使用的UserControl。 - ResourceDictionary:需要明确地合并到资源树中,在其被使用的位置上方。这可以是App.xaml、Windowxx.xaml或某个较低级别的元素。使用ResourceDictionary.MergedDictionaries来完成此操作。
还有很多指定路径的替代方法,但这是最简单的方法。
<Window>
    <Window.Resources>
      <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
          <ResourceDictionary Source="Resources/MyResourceDict.xaml" />
        </ResourceDictionary.MergedDictionaries>
      </ResourceDictionary>
    </Window.Resources>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接