在运行时动态合并资源字典(对于插件)

时间:2009-09-09 12:39:55

标签: c# wpf mef

我正在为WPF应用程序使用Managed Extensibility Framework。我为所谓的扩展点定义了接口,为应用程序提供了新功能。

其中一些功能可能是使用某些数据模板显示数据,您可能希望在xaml资源文件中指定这些模板。

如果我在应用程序编译时不知道的程序集中定义了这些扩展点之一(即普通语言的插件),但我仍然希望将插件的资源与应用程序的资源合并,我将如何进行它?

所有示例都显示了如何使用pack URI表示法状态来执行此操作,该状态是在编译时已知引用的程序集时的解决方案。当你在编译时不熟悉程序集时,你如何实现同样的目标?

2 个答案:

答案 0 :(得分:4)

您需要 - 通过代码或约定 - 获取要合并的资源字典的详细信息。详细信息可以是资源字典的名称,也可以是ResourceDictionary实例本身。

在后一种情况下,您拥有ResourceDictionary实例,因此您可以将其合并到Application级别(或任何适合的级别)资源。

在前一种情况下,您需要使用程序集的名称构建适当的pack URI(可以通过调用extension.GetType().Assembly从扩展中获取)。然后创建ResourceDictionary,其Source设置为包URI。最后,将其合并到资源树的适当级别。

答案 1 :(得分:0)

Here's how to pull in resource dictionaries from parts into your application resources使用MEF(在本例中为数据模板)。我基于SoapBox Core这种导入视图资源字典的方法。