2009-09-09 39 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