如何在 WPF 中将一个资源字典导入到另一个资源字典中
本文关键字:资源 字典 一个 导入 另一个 WPF | 更新日期: 2023-09-27 18:33:59
是否可以将一个资源字典添加到另一个资源字典中?
在 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 对这个问题的回答
直接来自我正在处理的 sketchflow 项目的片段,展示了如何在 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>
这显示了将两个额外的资源字典合并到另一个资源字典中。
(请注意,如果您在多个位置定义了默认样式,则顺序可能会变得很重要,因为它们会相互覆盖)
像这样:
ResourceDictionary resources = new ResourceDictionary();
resources.Source = new Uri("/MyModule;component/MyModule.xaml",
UriKind.RelativeOrAbsolute);
Application.Current.Resources.MergedDictionaries.Add(resources);
可能是您要找的。 我们在棱镜模块中使用这样的代码。