【问题标题】: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
    相关资源
    最近更新 更多