如果图像的Build Action属性是Content,为什么在WPF项目中为图像打包URI不起作用?
本文关键字:图像 项目 URI 不起作用 WPF 为什么 Action Build 属性 如果 Content | 更新日期: 2023-09-27 18:05:06
我正在尝试在WPF项目中使用图像文件实现Pack URI。根据Head First c# 一书,将图像的Build Action属性更改为Content是一个很好的实践。按照本指南的图像作为内容,我无法使其工作,然而,将图像的构建动作属性更改为资源使其工作没有问题。下面是我的方法代码:
public static BitmapImage CreateImageFromAssets(string imageFilename)
{
try
{
Uri uri =
new Uri("pack://application:,,,/Assets/" +
imageFilename, UriKind.Absolute);
return new BitmapImage(uri);
}
catch (IOException)
{
return new BitmapImage();
}
}
我尝试使用其他选项,如:
Uri uri =
new Uri("pack://application:,,,/BeesOnAStarryNight;component/Assets/"
+ imageFilename, UriKind.RelativeOrAbsolute);
Uri uri =
new Uri("pack://application:,,,/BeesOnAStarryNight;component/Assets/"
+ imageFilename, UriKind.Absolute);
图片文件名为"Bee1.png"这是我得到的错误:
类型为"System"的未处理异常。InvalidOperationException'在PresentationCore.dll中发生
我尝试没有try catch,得到这个:
未处理的System.IO类型异常。目录notfoundexception '发生在mscorlib.dll
附加信息:找不到路径"C:'Users'myuser'TRAINING'DEV'Assets'Bee1.png"的一部分。
不知道为什么我有一个不完整的路径到解决方案文件夹。
是/DEV后面的几个文件夹。想知道为什么它只工作,如果图像有一个资源的构建动作属性?使用它作为内容真的是一个很好的做法吗?
您的URI是一个资源文件包URI,无需指定UriKind
就可以创建它,如
var uri = new Uri("pack://application:,,,/Assets/" + imageFilename);
正如名称"Resource File Pack URI"所暗示的那样,映像文件必须是一个资源文件,即它的Build Action必须是Resource
。