合并资源字典

我正在尝试将wpf资源字典合并到后面的代码上,但是由于某些原因,这不起作用。 如果我尝试合并文档本身的字典,它正在运行,例如:

      

这是有效的,但如果我评论ResourceDictionary.MergedDictionaries并在代码中尝试这样:

 ResourceDictionary skin = new ResourceDictionary(); skin.Source = styleLocation; ResourceDictionary skinFather = new ResourceDictionary(); skinFather.MergedDictionaries.Add(skin); skinFather.Source = styleLocationFather; 

这会因为无法找到资源而中断。

您不能使用Source属性从代码加载资源字典。

来自MSDN :

“可以通过代码将合并的字典添加到资源字典中。对于任何Resources属性,默认的,最初为空的ResourceDictionary也具有默认的,最初为空的MergedDictionaries集合属性。要通过代码添加合并字典,您将获得对该字典的引用。所需的主ResourceDictionary,获取其MergedDictionaries属性值,并在MergedDictionaries中包含的genericsCollection上调用Add。您添加的对象必须是新的ResourceDictionary。在代码中,您不需要设置Source属性。相反,您必须获取ResourceDictionary对象通过创建一个或加载一个。一种方法是加载现有的ResourceDictionary以在具有ResourceDictionary根的现有XAML文件流上调用XamlReader.Load,然后将XamlReader.Load返回值转换为ResourceDictionary。

因此,一些伪代码:

 ResourceDictionary myResourceDictionary = XamlReader.Load(someXamlStreamReader); anotherResourceDictionary.MergedDictionaries.Add(myResourceDictionary); 

这是另一个如何做到的例子 :

 Uri uri = new Uri("/PageResourceFile.xaml", UriKind.Relative); StreamResourceInfo info = Application.GetResourceStream(uri); System.Windows.Markup.XamlReader reader = new System.Windows.Markup.XamlReader(); Page page = (Page)reader.LoadAsync(info.Stream);