引用MEF加载的MergedDictionary

时间:2013-08-22 06:26:29

标签: wpf mef resourcedictionary

加载使用资源字典的外部插件时遇到问题。我正在使用MEF和延迟加载来加载外部程序集中的用户控件,这是一个用户控件库项目。

此用户控件以下列方式引用资源字典,并标记为en export:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source ="MyTheme.xaml" />   
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

主应用程序加载插件,并导入其资源字典,如下所示:

[ImportMany(typeof(ResourceDictionary))]
private IEnumerable<ResourceDictionary> _resourceDictionaries { get; set; }

private void Load()
{
   foreach (var resourceDictionary in _resourceDictionaries)
   {
        Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
   }
}

这可以从外部程序集加载用户控件和字典。但是,在创建控件实例时,主应用程序会抛出一个异常,指出它无法找到引用的ResourceDictionary。

如何让我的主机应用程序知道在哪里查找其外部用户控制资源字典?或者我应该更改用户控件引用其资源的方式吗?

1 个答案:

答案 0 :(得分:2)

好的让它运转起来。必须在构建操作中将资源文件设置为Resource。

此处有更多详情: Loading merged ResourceDictionary from different assembly fails