动态加载资源字典文件到wpf应用程序会出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态加载资源字典文件到wpf应用程序会出错相关的知识,希望对你有一定的参考价值。

我正在尝试使用该语句动态添加xaml资源文件,

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("resources/leaf_styles.xaml", UriKind.Relative) });

这是抛出异常,无法找到资源'resources / leaf_styles.xaml'。

我将leaf_styles.xaml文件添加到资源文件夹下的项目中,BuildAction设置为“Content”,CopyAlways设置为True。我仍然得到这个错误。有人可以帮我指出什么错?

附加信息 -

  • 我不想将xaml文件嵌入为资源
  • 当前项目是.net 3.5类库项目
  • 上面的mergedictionary语句是在属于同一个项目的类中编写的
  • 一旦我发现这不起作用(用于测试),我还手动添加了[assembly:AssemblyAssociatedContentFile(“resources / leaf_styles.xaml”)]

更新

如果我把它作为绝对位置,它正常工作。

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri(@"D:foo	runkin
esourcesleaf_styles.xaml", UriKind.Absolute) });
答案

最后,它奏效了。这是我做的,

  1. 经过'http://msdn.microsoft.com/en-us/library/aa970069.aspx
  2. 将Uri模式更改为 var foo = new Uri("pack://siteoforigin:,,,/resources/leaf_styles.xaml", UriKind.RelativeOrAbsolute); Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = foo });
另一答案

要加载内容文件,可以调用Application类的GetContentStream方法,传递标识所需内容文件的pack URI。

查看

http://msdn.microsoft.com/en-us/library/aa970494.aspx#Content_Files

编辑

我成功地做到了这一点

    Uri uri = new Uri("Resources/MyDict.xaml", UriKind.Relative);
    StreamResourceInfo info = Application.GetContentStream(uri);
    System.Windows.Markup.XamlReader reader = new System.Windows.Markup.XamlReader();
    ResourceDictionary myResourceDictionary = 
                                   (ResourceDictionary)reader.LoadAsync(info.Stream);
    Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
另一答案

我遇到了同样的“缺少资源问题”并且抓了几个小时。然后我意识到我的程序集名称包含点(。)并更改了资源程序集名称,再次测试并且它有效。这是一个16x16 png图像文件,我想加载。但是我看到点缀的程序集名称会导致soma情况出错,并且不会导致其他情况的错误。

  • 1)如果您从资源加载样式,它可以工作
  • 2)如果要加载图像,则不起作用。无法找到该资源。

我在两种情况下都使用相同的代码,但结果不同。我不知道这是不是一个wpf错误。

以上是关于动态加载资源字典文件到wpf应用程序会出错的主要内容,如果未能解决你的问题,请参考以下文章

2021-09-12 WPF上位机 06-资源字典与样式

在运行时切换 wpf 资源字典

VS2010 WPF 加载不了设计视图的问题,代码是正常的,但是视图加载不出来

WPF ResourceDictionary 主题资源替换

在后台代码中引入XAML的方法

WPF动态加载样式文件