几个小时以来,我一直在尝试加载位于程序集内部的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'条目。
我做错了什么?
答案 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
必须由实际的程序集名称替换。