合并资源字典
问题描述:
我想合并后面的代码wpf资源字典,但对于一些reasion这是行不通的。如果我尝试合并在它的运行,例如文档本身的字典:合并资源字典
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication212;assembly=WpfApplication212">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Theme.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type local:URComboBox}" BasedOn="{StaticResource ComboBoxStyle}">
</Style>
这是工作,但如果我评论的ResourceDictionary.MergedDictionaries和代码试试这个:
ResourceDictionary skin = new ResourceDictionary();
skin.Source = styleLocation;
ResourceDictionary skinFather = new ResourceDictionary();
skinFather.MergedDictionaries.Add(skin);
skinFather.Source = styleLocationFather;
由于无法找到资源,因此会中断。
答
您无法使用Source属性从代码加载资源字典。
从MSDN:
“合并字典可以通过代码添加到资源字典中的默认情况下,存在的任何资源属性也有一个默认的,初始为空MergedDictionaries集合属性初始为空的ResourceDictionary要。通过代码添加合并的字典,获得对所需主要ResourceDictionary的引用,获取其MergedDictionaries属性值,并在包含在MergedDictionaries中的泛型集合上调用Add。添加的对象必须是新的ResourceDictionary。不要设置Source属性,而必须通过创建一个或加载ResourceDictionary对象来获得ResourceDictionary对象方法来加载现有的ResourceDictionary,以在具有ResourceDictionary根的现有XAML文件流上调用XamlReader.Load,然后将XamlReader.Load返回值转换为ResourceDictionary。“
因此,一些伪代码:
ResourceDictionary myResourceDictionary = XamlReader.Load(someXamlStreamReader);
anotherResourceDictionary.MergedDictionaries.Add(myResourceDictionary);
的怎么办呢Here is another example:
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);
什么是 “styleLocation” 和 “styleLocationFather”? – 2010-04-12 15:39:41