几个小时以来,我一直试图加载位于将要加载它的程序集中的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"条目。
我做错了什么?
您必须使用资源文件包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");
其中CCD_ 7必须被实际的程序集名称所取代。