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



几个小时以来,我一直试图加载位于将要加载它的程序集中的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必须被实际的程序集名称所取代。

最新更新