Joã*_*iro 7 c# wpf styles resourcedictionary
我正在尝试将wpf资源字典合并到后面的代码上,但是为了解决这个问题,这是行不通的.如果我尝试合并文档本身的字典,它正在运行,例如:
<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>
Run Code Online (Sandbox Code Playgroud)
这是有效的,但如果我评论ResourceDictionary.MergedDictionaries并在代码中尝试这样:
ResourceDictionary skin = new ResourceDictionary();
skin.Source = styleLocation;
ResourceDictionary skinFather = new ResourceDictionary();
skinFather.MergedDictionaries.Add(skin);
skinFather.Source = styleLocationFather;
Run Code Online (Sandbox Code Playgroud)
这会因为无法找到资源而中断.
您不能使用Source属性从代码加载资源字典.
来自MSDN:
"可以通过代码将合并的字典添加到资源字典中.对于任何Resources属性,默认的,最初为空的ResourceDictionary也具有默认的,最初为空的MergedDictionaries集合属性.要通过代码添加合并字典,您将获得对所需的主ResourceDictionary,获取其MergedDictionaries属性值,并在MergedDictionaries中包含的泛型Collection上调用Add.您添加的对象必须是新的ResourceDictionary.在代码中,您不需要设置Source属性.相反,您必须获取ResourceDictionary对象通过创建一个或加载一个.一种方法是加载现有的ResourceDictionary以在具有ResourceDictionary根的现有XAML文件流上调用XamlReader.Load,然后转换XamlReader.将返回值加载到ResourceDictionary."
因此,一些伪代码:
ResourceDictionary myResourceDictionary = XamlReader.Load(someXamlStreamReader);
anotherResourceDictionary.MergedDictionaries.Add(myResourceDictionary);
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9068 次 |
| 最近记录: |