在wpf程序集中加载png资源失败

时间:2015-11-24 14:13:40

标签: wpf resources

几个小时以来,我一直在尝试加载位于程序集内部的PNG文件(WPF UserControl),但没有任何成功。 PNG文件" folder.png"现在位于项目根目录中。在VS2015项目中,该文件也可以作为项目根成员显示。该文件的构建操作是资源(不要复制)。

现在简单的测试代码(通常图像文件将在项目的某个子文件夹中):

 Uri pngUri = new Uri(@"folder.png", UriKind.Relative);
 BitmapImage pleaseWork = new BitmapImage(pngUri);

我所看到的是file could not be located.在Uri构造之后在Debug配置中设置断点,pngUri对象的大多数属性显示:

  

System.InvalidOperationException。

BitmapImage构建后,pleaseWork对象显示:

  

System.FileNotFoundException

我尝试以不同的方式构建Uri对象但没有成功。

顺便说一句,ILSpy在MyAssembly.g.resources下正确找到了PNG文件' folder.png'条目。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

您必须使用Resource File Pack URI

var pngUri = new Uri("pack://application:,,,/folder.png");
var pleaseWork = new BitmapImage(pngUri);

如果文件位于不同的程序集中,则必须将程序集名称添加到Pack URI:

var pngUri = new Uri("pack://application:,,,/ReferencedAssembly;component/folder.png");

其中ReferencedAssembly必须由实际的程序集名称替换。