我有一個非常奇怪的問題,我無法在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