Silverlight MEF - 导入资源并放入generic.xaml

时间:2012-01-22 12:48:54

标签: silverlight mef generic.xaml

我有一个带有generic.xaml文件的silverlight应用程序。 在通用文件中,我想合并由MEF从其他DLL导入的字典。

我该怎么做? (一个例子很好)

2 个答案:

答案 0 :(得分:0)

我在一个特定模块加载时执行此操作,并且运行良好。

在模块的构造函数中,添加一个对将加载资源的方法的调用 - 这很有效,因为通过这样做,我会被缺少资源的例外通知:

 addResourceDictionaries();



 protected void addResourceDictionaries()
    {
        LoadResource ( new Uri("/NAME_OF_DLL;component/assets/name_and_path_of_xaml.xaml", UriKind.Relative));
    }

private void LoadResource(Uri uri)
    {
        var info = System.Windows.Application.GetResourceStream(uri);
        string xaml;
        using (var reader = new System.IO.StreamReader(info.Stream))
        {
            xaml = reader.ReadToEnd();
        }

        ResourceDictionary result = System.Windows.Markup.XamlReader.Load(xaml) as ResourceDictionary;

        if (result != null)
        {
            System.Windows.Application.Current.Resources.MergedDictionaries.Add(result);
        }
    }

答案 1 :(得分:0)

我使用以下内容:

使用mef导出我的resourcedictionary(只需将.cs文件添加到Resourcedictionary)

[ExportResourceDictionary]
public partial class MyResourcen : ResourceDictionary
{
    public MyResourcen()
    {
        InitializeComponent();
    }
}

将新的类文件添加到xaml

<ResourceDictionary x:Class="Test.Resourcen.MyResourcen">

导入所需的资源,例如app.xaml

[ImportMany("Resourcen", typeof(ResourceDictionary), AllowRecomposition = true)]
private IEnumerable<ResourceDictionary> ImportResourcen { get; set; }

    #region Implementation of IPartImportsSatisfiedNotification

    public void OnImportsSatisfied()
    {
        foreach (var dic in ImportResourcen)
        {
            this.Resources.MergedDictionaries.Add(dic);
        }
    }

    #endregion

至少这里是exportattribute

[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class ExportResourceDictionaryAttribute : ExportAttribute
{
    public ExportResourceDictionaryAttribute() : base("Resourcen", typeof(ResourceDictionary))
    {

    }
}