如何在XAML中引用图像资源?

91

我在一个窗口上放置了一个 Image 控件,我想显示存储在项目资源文件 "Resources.resx" 中的图像。资源文件中图像的名称为 'Search'。

有人可以向我展示如何做到这一点吗?

4个回答

126

如果图片位于资源文件夹中且其构建操作设置为 Resource,则可以按以下方式在 XAML 中引用该图片:

"pack://application:,,,/Resources/Search.png"

假设您在Resources文件夹下没有任何文件夹结构,而且它是一个应用程序。例如,我使用:

ImageSource="pack://application:,,,/Resources/RibbonImages/CloseButton.png"

当我在资源文件夹下有一个名为RibbonImages的文件夹。


'pack' 命名空间代表什么? - Hosea146
2
这是关于 Pack URI 的信息:http://msdn.microsoft.com/zh-cn/library/aa970069(v=VS.90).aspx#The_Pack_URI_Scheme - Viv
2
我已经有一段时间没有向我的应用程序添加图像了... 我可能错了,但我认为在 WPF 设计器中显示图像之前,您可能需要构建您的应用程序。 - Viv
我正在尝试使用DLL中定义的资源。我的图像位于“Resources/Images”下,并标记为“Resource”。但是,没有任何内容显示出来。在DLL中使用资源需要做一些不同的事情吗? - Mark A. Donohoe
3
我目前无法进行测试,但从上面提供的MSDN链接看来,对于引用的程序集,它说要使用:"/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"。其中,“ReferencedAssembly”将是您的程序集名称。我编写了类似以下的代码:"/MyProgram.Namespace;component/Resources/imagename.png"。 - Viv
2
@wonea,这对我起作用:使用“Resource”生成操作,“pack://application:,,,/YourAppName;component/Resources/FileDialog.png”。 - antonio

37
如果您在项目的Icons文件夹中有一个图像,并且它的生成操作为“Resource”,则可以按照以下方式引用它:


如果您的项目的Icons文件夹中有一张图片,其构建操作设置为“Resource”,则可以按照以下方式引用该图片:
<Image Source="/Icons/play_small.png" />

这是最简单的方法。这是我能想到的仅基于资源的方式,没有任何项目文件:

var resourceManager = new ResourceManager(typeof (Resources));
var bitmap = resourceManager.GetObject("Search") as System.Drawing.Bitmap;

var memoryStream = new MemoryStream();
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
memoryStream.Position = 0;

var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memoryStream;
bitmapImage.EndInit();

this.image1.Source = bitmapImage;

20
这里有一个小变化: <Image Source="/Icons/play_small.png" /> 注意开头有一个斜杠,这表示在根文件夹中查找。如果XAML文件不在根目录下,则需要这样做,因为如果没有斜杠,它将从与XAML文件相同的目录开始搜索。 - Greg Gum

9
使用资源文件的好处之一是可以通过名称访问资源,因此即使图像更改,图像名称更改,只要资源保持最新,正确的图像将显示出来。
以下是更清晰的方法来实现这个目标: 假设Resources.resx在'UI.Images'命名空间中,在您的xaml中添加命名空间引用,如下所示:
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:UI="clr-namespace:UI.Images" 

将您的图像源设置为以下内容:

<Image Source={Binding {x:Static UI:Resources.Search}} /> 其中“Search”是资源的名称。


确保资源设置为公共资源:https://dev59.com/g2kw5IYBdhLWcg3wmryH#19667704 - Mark Sowul
4
实际上,这似乎对于图像不起作用,因为资源正在使用System.Drawing.Bitmap。 - Mark Sowul

5
  1. 将文件夹添加到您的项目中,并通过“现有项目”向其中添加图像。
  2. 类似于以下的 XAML 代码: <Image Source="MyRessourceDir\images\addButton.png"/>
  3. 按下 F6 键进行构建。

<ImageBrush ImageSource="Assets\Placeholder.png"/> 对我有用,谢谢。 - Varus Septimus
在文件的“属性”选项卡上,将BuildAction设置为“Resource”。 - Richard II

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