【问题标题】:Merging Resources Dictionaries合并资源字典
【发布时间】:2011-02-07 00:34:48
【问题描述】:

我正在尝试在后面的代码中合并 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>

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

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

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

【问题讨论】:

  • 什么是“styleLocation”和“styleLocationFather”?

标签: c# wpf styles resourcedictionary


【解决方案1】:

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

来自MSDN

"合并字典可以通过代码添加到资源字典中。任何 Resources 属性都存在的默认初始为空的 ResourceDictionary 也具有默认初始为空的 MergedDictionaries 集合属性。要通过代码添加合并字典,您可以获得引用所需的主 ResourceDictionary,获取其 MergedDictionaries 属性值,然后在 MergedDictionaries 中包含的泛型 Collection 上调用 Add。您添加的对象必须是新的 ResourceDictionary。在代码中,您不设置 Source 属性。相反,您必须通过创建一个或加载一个来获取 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多