我有一个非常奇怪的问题,我无法在Wpf应用程序中修复。我们构建了一个包含许多有用组件的通用库,其中一个是具有公司风格的花哨MessageBox。这里是一个包含近,我们需要的一切三点字典:即使存在资源也无法找到资源
<ResourceDictionary Source="/Library;component/Style/Styles.xaml" />
<ResourceDictionary Source="/Library;component/Themes/Globals.xaml"/>
<ResourceDictionary Source="/Library;component/Themes/Controls/Button/Template.xaml"/>
有用于在MessageBox到Globals.xaml页脚,页脚使用从Template.xaml的模板。它完美的工作,但不是在一个案例。我有一个主窗口,用于创建插件并打开一个窗口。此窗口是通过反射加载的常规Window Wpf应用程序。 打开MessageBox的方法与Resource Dictionaries位于相同的DLL中。
如果我从插件调用这个MessageBox方法,它会抛出一个异常,因为找不到“Footer”。我之前设置了一个断点
window.ShowDialog();
我看到MergedDictionaries是空的窗口。在任何地方也是空的,只有这个MessageBox的所有者包含这些资源。做
window.FindResource("key");
按预期得到一个空值。不过,如果我打开对话框之前,使用该行代码手动复制合并字典:
foreach (var dict in owner.Resources.MergedDictionaries)
{
window.Resources.MergedDictionaries.Add(dict);
}
然后找window.FindResource(“钥匙”),我可以看到的风格,但即使它继续抛出一个异常:
找不到名为“{Footer}”的资源。资源名称区分大小写。
页脚风格在这条线的MessageBox的使用:
<StatusBar Style="{StaticResource Footer}" DataContext="{Binding ElementName=window}"...
我也试过这种资源宣布进入库中的DialogWindow,即使我不是要去被允许更改:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Library;component/Themes/Generic.xaml" />
<ResourceDictionary Source="/Library;component/Themes/Globals.xaml"/>
<ResourceDictionary Source="/Library;component/Themes/Controls/Button/Template.xaml"/>
</ResourceDictionary.MergedDictionaries>
我已经2天在监视器上敲我的头,没有什么,我试过的所有东西都失败了。尽管当然会破坏显示器。 跑出想法...
问候。
感谢您的答但我做到了。最奇怪的是我可以调试应用程序并使用“FindResource”方法检查是否加载了该资源。即使我强制它不能通过MessageBox找到。 – 2012-02-03 18:59:23
对不起,我不明白我的理解。 这是什么意思: 引用Style的每个项目都有一个库引用(即使您将App.xaml中的Dictionary放入App.xaml中,如果该项目没有引用Resources Library,那么它也不会找到它。如何添加对资源库的引用?是否只是指项目选项下的内容? – 2013-08-09 00:14:25