2012-02-03 109 views
0

我有一個非常奇怪的問題,我無法在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天在監視器上敲我的頭,沒有什麼,我試過的所有東西都失敗了。儘管當然會破壞顯示器。 跑出想法...

問候。

回答

0

使確保以下幾點

  • 資源字典生成操作設置爲頁面
  • 每個項目都引用樣式有一個圖書館參考它(即使你把應用程序的字典。 XAML如果不引用的資源庫,然後一個項目,它不會發現它
  • 將在App.xaml中的MergedDictionaries(或特定頁面,您要使用它們)
+0

感謝您的答但我做到了。最奇怪的是我可以調試應用程序並使用「FindResource」方法檢查是否加載了該資源。即使我強制它不能通過MessageBox找到。 – 2012-02-03 18:59:23

+0

對不起,我不明白我的理解。 這是什麼意思: 引用Style的每個項目都有一個庫引用(即使您將App.xaml中的Dictionary放入App.xaml中,如果該項目沒有引用Resources Library,那麼它也不會找到它。如何添加對資源庫的引用?是否只是指項目選項下的內容? – 2013-08-09 00:14:25