我的项目中有一个文件夹,模板,包含(已编译的)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
)中的名称?
答案 0 :(得分:6)
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为名称添加前缀。