23

是否可以将一个资源字典添加到另一个资源字典中?

4

3 回答 3

26

在 Dictionary2.xaml 中定义 MergedDictionaries(紧跟在打开 ResourceDictionary 标记之后):

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/Path/to/Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>

有一个问题:每次合并字典时,您都会有效地创建合并字典的副本。它是递归的 - 如果您有 Dict3.xaml 和 Dict4.xaml 都加载 Dictionary2.xaml,您将创建 Dictionary1.xaml 的三个实例

解决方案是SharedResourceDictionary。本教程中的实现应该被视为一个起点,并且可能需要进行一定程度的调整 - 取决于使用场景。谷歌“wpf SharedResourceDictionary”了解一些问题和解决方案。

XAMeLi对这个问题的回答

于 2012-05-11T03:30:27.563 回答
4

我正在处理的一个草图流项目中的一个片段直接显示了如何在 xaml 中合并资源字典:

<Application.Resources>
    <!-- Resources scoped at the Application level should be defined here. -->
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/Microsoft.Expression.Prototyping.SketchControls;component/ScrollViewerStyles.xaml"/>
            <ResourceDictionary Source="/[ProjectABC];component/[fileXYZ].xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

这显示了将两个额外的资源字典合并到另一个资源字典中。

(请注意,如果您在多个地方定义了默认样式,则顺序会变得很重要,因为它们会相互覆盖)

于 2012-05-11T03:23:59.267 回答
1

就像是:

ResourceDictionary resources = new ResourceDictionary();
resources.Source = new Uri("/MyModule;component/MyModule.xaml", 
     UriKind.RelativeOrAbsolute);
Application.Current.Resources.MergedDictionaries.Add(resources);

可能是你正在寻找的。我们在 Prism 模块中使用这样的代码。

于 2012-05-10T20:25:05.400 回答