2009-09-09 37 views
3

我正在爲WPF應用程序使用託管擴展性框架。我定義了爲應用程序提供新功能的所謂擴展點的接口。在運行時動態合併資源字典(針對插件)

其中一些功能可能是使用某些數據模板顯示數據,這些數據模板您可能希望在xaml資源文件中指定。

如果我在應用程序編譯時未知的程序集中定義了這些擴展點之一(即通俗易懂的插件),但我仍然想要將插件的資源與應用程序的資源合併,我該如何去關於它?

所有示例顯示瞭如何使用pack URI表示法進行此操作,這是在編譯時知道您引用的程序集時的解決方案。當你在編譯時不熟悉程序集時,你如何達到同樣的目的?

回答

4

您需要通過代碼或約定來獲取要合併的資源字典的詳細信息。詳細信息可能是資源字典的名稱或ResourceDictionary實例本身。

在後一種情況下,您有ResourceDictionary實例,因此您可以將它合併到Application級別(或任何適合的級別)資源中。

在前一種情況下,您需要使用程序集名稱(可通過調用extension.GetType().Assembly從擴展中獲得)構造合適的pack URI。然後創建一個ResourceDictionary,其Source設置爲pack URI。最後,將其合併到資源樹的適當級別。

+0

很好的回答。 +1 給出這個特定的約束的另一個偉大的答案是在這篇文章中:http://stackoverflow.com/questions/842571/using-mef-to-import-a-wpf-datatemplate – 2009-09-09 13:53:01