5

我有一个导入 MEF 组件,它在导入向导打开时动态加载。一旦用户选择了她想要处理的导入类型,对导入向导对话框的控制就会传递给所选的导入组件。当然,导入组件需要为向导对话框提供资源(例如DataTemplates)。目前这是通过DataTemplateSelector导入组件提供的 s 实现的。他们访问ResourceDictionary导入组件的程序集的本地。

但正如您可以想象的那样,这很乏味:我必须为每个DataTemplate提供的代码添加代码,WPF 不会自动使用正在显示DataTemplate的类型的权限。ViewModel

以前有人解决过这个问题吗?你们如何在插件环境中提供资源?

感谢您提前提供任何帮助。

此致

4

2 回答 2

14

我不知道在哪里找到了这个小技巧,但是您可以做的一件事是在编写外部程序集时动态导入资源字典。

在每个包含资源的程序集中,您可以通过隐藏代码并进行如下注释来导出一个或多个 ResourceDictionary 对象:

[Export(typeof(ResourceDictionary))]
public partial class Resources : ResourceDictionary
{
    public Resources()
    {
        InitializeComponent();
    }
}

现在您需要一个组件来解析[ImportMany] IEnumerable<ResourceDictionary> resourceDictionaries并执行以下操作:

        //Merge exported resource dictionaries from all composed sources into the application
        foreach (var resourceDictionary in resourceDictionaries)
        {
            Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
        }
于 2012-05-10T13:35:27.123 回答
0

如果您导入的组件将仅包含在应用程序的特定区域中,则您可以仅将组件的根 ViewModel 的 DataTemplate 添加到表示组件所在区域的 FrameworkElement 的资源中。然后,所有其他 DataTemplate(对于导入组件中的其他 ViewModel)将包含在组件根 ViewModel 的 DataTemplate 的资源中。

于 2012-05-10T10:16:56.417 回答