2009-06-03 129 views
16

如果我在一個項目中有ResourceDictionary,是否可以創建另一個使用第一個項目中定義的資源的項目?請注意,這兩個項目都是WPF應用程序,而不是ControlLibraries。是否可以在多個項目之間共享ResourceDictionary文件?

謝謝!

+0

重複? http://stackoverflow.com/questions/338056/wpf-resource-dictionary-in-a-separate-assembly – 2012-01-25 19:52:09

回答

28

是的,當然這是可能的,只要項目B有一個參考項目A.

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/Project A;component/YourSubFolder/YourResourceFile.xaml" /> 
</ResourceDictionary.MergedDictionaries> 

然後,你可以使用YourResourceFile.xaml定義的資源。

+0

哦,快點。我正在嘗試一下!謝謝!! – Pwninstein 2009-06-03 20:32:41

+0

我不知道這個 - 很酷的把戲! – 2009-06-04 14:46:34

+0

如果項目不共享參考,會發生什麼情況?在我的情況下,我使用PRISM並在Shell中聲明樣式。我希望能夠重用一些定義的顏色。 – R4cOON 2009-07-31 13:07:59

10

我發現我不得不引用程序集本身而不使用項目名稱。我也不需要使用pack:///語法來使其工作。

這個答案的重複問題,指定要使用的格式(我可以驗證這句法工作在.NET 4.0): https://stackoverflow.com/a/10216253/1260563

具體(因爲我總是忘了組成部分,認爲它是一個文件夾的人使用):

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/<YourAssemblyName>;component/<YourReferencedFileHere.xaml>" /> 
</ResourceDictionary.MergedDictionaries> 

所以,如果你有一個裝配Abc.Def.dll並在DLL在根級別稱爲Xyz.xaml一個文件,你可以使用:

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/Abc.Def;component/Xyz.xaml" /> 
</ResourceDictionary.MergedDictionaries> 

注意:Resharper 7指出我必須引用程序集本身。

+0

感謝您提供具體示例並指出路徑組件部分的必要性。這比我偶然發現的其他六種解決方案更有幫助。 – 2016-07-09 12:27:39

相關問題