如果图像的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后面的几个文件夹。

想知道为什么它只工作,如果图像有一个资源的构建动作属性?使用它作为内容真的是一个很好的做法吗?

如果图像的Build Action属性是Content,为什么在WPF项目中为图像打包URI不起作用?

您的URI是一个资源文件包URI,无需指定UriKind就可以创建它,如

var uri = new Uri("pack://application:,,,/Assets/" + imageFilename);

正如名称"Resource File Pack URI"所暗示的那样,映像文件必须是一个资源文件,即它的Build Action必须是Resource