动态加载ResourceDictionary

时间:2011-06-30 14:12:04

标签: c# wpf xaml resourcedictionary

我的项目中有一个文件夹,模板,包含(已编译的)XAML ResourceDictionaries。

在UserControl中,我想将所有模板加载到ResourceDictionary中。我会使用如下代码:

public MyView()
{
    InitializeComponent();
    foreach (var resourceUri in new GetResourceUrisFromTemplatesFolder())
        Resources.MergedDictionaries.Add(
            new ResourceDictionary
                { Source = new Uri(resourceUri, UriKind.Relative) });
}

我需要写的是GetResourceUrisFromTemplatesFolder方法。我需要它来发现该文件夹中的所有资源。

URI可以采用/MyAssembly;component/MyNS/Templates/Template12345.xaml../../Templates/Template12345.xaml

等形式

这可能吗?

我是否必须手动转换程序集的已编译资源(MyAssembly.g.resources)中的名称?

2 个答案:

答案 0 :(得分:6)

BTW,人们也可以手动加载ResourceDictionary:

ResourceDictionary dict = new ResourceDictionary(); 
System.Windows.Application.LoadComponent(dict, 
  new System.Uri("/SomeAssembly;component/SomeResourceDictionary.xaml",
  System.UriKind.Relative));

之后,可以在Keys属性上使用foreach与该dict对象进行对话等等

http://msdn.microsoft.com/en-us/library/ms596995(v=vs.95).aspx

  

加载的XAML文件可以是应用程序定义文件(例如,App.xaml)>或者是页面文件(例如,MainPage.xaml)。 XAML文件可以位于以下位置之一:

     
      
  • 包含在应用程序包中。
  •   
  • 嵌入应用程序集中。
  •   
  • 嵌入原始网站的库装配体中。
  •   

答案 1 :(得分:1)

  

我是否必须从程序集的已编译资源(MyAssembly.g.resources)手动转换名称?

可能就是这种情况,我自己也会采用这种方式,但是关于如何做到has been answered已经如此的问题应该不是那么多问题。确保字典的编译操作匹配,并且您可能希望使用包uri为名称添加前缀。