WPF - 将图像作为资源导入

50

在WinForms中,可以将图像作为资源导入,即使在/bin/Debug文件夹中编译,图像仍然可以正常工作。

我无法弄清楚如何在WPF中实现这一点。当我运行应用程序时,图像不会加载,因为该图像保存在/Projects/AppName/images/中,而应用程序在调试模式下编译到/Projects/AppName/bin/Debug。我只需要复制Images文件夹并将其放到应用程序编译的位置吗?还是别有他法?这是显示我的图像的代码:

<Image Width="300">
    <Image.Source>
        <BitmapImage DecodePixelWidth="300" UriSource="/images/jamsnaps-dark.png" />
    </Image.Source>
</Image>
3个回答

103
  • 在您的Visual Studio项目中创建一个文件夹(例如images)。
  • 将图像文件添加到该文件夹中。
  • 将它们的Build Action设置为Resource(在属性窗口中,参见此答案中的第二张图片)。

然后像您已经做过的那样编写UriSource属性:

UriSource="/images/jamsnaps-dark.png"

该URI实际上是一个资源文件包URI,其中前缀由XAML解析器自动添加。

在代码后台,您会写

bitmap.UriSource = new Uri("pack://application:,,,/images/jamsnaps-dark.png");

5

两种选择:

1)从 bin/Debug 中退出,通过 ../../ 进入您的应用程序文件夹,然后进入您的图像。

  <Image>
      <Image.Source>
           <BitmapImage  UriSource="../../images/jamsnaps-dark.png" />
      </Image.Source>
   </Image>

2) 在图像文件的上下文菜单中,将图像编译为内容(Content)属性,并且当它们被编译后,它们会被放置在已经调试好的位置。 我不确定是否还需要在属性中告诉它们也要复制本地文件(我暂时无法在计算机旁进行检查)。


谢谢,也可以,但其他回答解释得更好 :) - Martyn Ball
他做了其他的事情。这也很好。这样做的重点是要知道您定位文件的位置,无论它们是编译为资源/内容还是仅放置在解决方案中。 我不记得每种方法的优缺点了。 - eran otzap

3
  1. 将图片添加到项目目录中
  2. 在解决方案浏览器中,右键单击该图片,选择“包含在项目中”

默认情况下,构建操作应设置为资源

然后,您可以开始使用相对于根目录的图像路径,例如images/text.jpg(如果将其放在名为images的文件夹中)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接