【发布时间】:2014-03-14 10:20:07
【问题描述】:
资源字典合并到窗口中,如下面的代码所示。
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="DefaultTheme.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
我为上下文菜单创建了一个自定义控件,并在 DefaultTheme.xaml 文件中创建了相应的样式。即使在窗口级别合并了资源字典,自定义控件也无法访问样式。
因为它是自定义控件,所以我不得不像这样在 C# 构造函数中合并字典 -
const string defaultThemePath = "DefaultTheme.xaml";
var dictionary = new ResourceDictionary { Source = new Uri(defaultThemePath, UriKind.Relative) };
Resources.MergedDictionaries.Add(dictionary);
如果资源字典被合并,它应该可用于子控件是一种期望。我对合并资源字典的理解是否错误?
编辑
正如@Rohit Vats 正确指出的那样,我的自定义控件是上下文菜单,它不是窗口可视子项的一部分。因此它没有继承资源字典。
【问题讨论】:
-
只要自定义控件是窗口的可视子级,就可以访问它。如果不是这种情况,请在 App 资源下合并字典。
-
谢谢罗希特。自定义控件是一个上下文菜单。如果我是对的,它不是窗口的可视子项:)...那么我应该如何合并字典,以便即使上下文菜单也可以具有样式...在构造函数中实例化对我来说看起来很脏。
-
我已为您的查询添加了答案(无法在此处添加,因为它需要更多空间来解释)。
标签: c# wpf hierarchy resourcedictionary