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


78

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

有人可以告诉我如何去做吗?

Answers:


113

如果映像位于资源文件夹中,并且其生成操作设置为“资源”。您可以按以下方式在XAML中引用该图像:

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

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

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

当我在Resources文件夹下有一个名为RibbonImages的文件夹时。


“ pack”名称空间代表什么?
Hosea146 2011年

2
这是有关压缩
Viv

2
自从我将图像添加到应用程序以来已经有一段时间了……我可能在这里很疲倦,但我认为您可能需要先构建应用程序,然后才能在WPF设计器中显示图像。
Viv

3
我现在无法测试它,但是从上面的MSDN链接中,对于引用的程序集,它说使用:“ / ReferencedAssembly; component / Subfolder / ResourceFile.xaml”。其中“ ReferencedAssembly”将是您的程序集名称。我已经编写了如下代码:“ / MyProgram.Namespace; component / Resources / imagename.png”
Viv

1
@wonea对我来说这项工作:“ pack:// application:,,, / YourAppName; component / Resources / FileDialog.png”,带有构建动作“ Resource”
antonio

30

如果您的项目的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;

17
对此略有不同:<Image Source="/Icons/play_small.png" />请注意开头的正斜杠表示在根文件夹中查找。如果xaml文件不在根目录下,这是必需的,因为没有正斜杠,它将在与xaml文件相同的目录中开始搜索。
Greg Gum

8

使用资源文件的好处之一是按名称访问资源,因此只要资源保持最新,就可以显示图像,更改图像名称,只要显示正确的图像即可。

这是一种更干净的方法来实现此目的:假设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}} /> 其中“搜索”是资源的名称。


确保将资源设置为公共资源:stackoverflow.com/a/19667704/155892
Mark Sowul,

3
实际上,这似乎不适用于图像,因为资源使用的是System.Drawing.Bitmap
Mark Sowul

4
  1. 将文件夹添加到项目中,然后通过“现有项目”向其中添加图像。
  2. XAML与此类似: <Image Source="MyRessourceDir\images\addButton.png"/>
  3. F6(内部版本)

<ImageBrush ImageSource =“ Assets \ Placeholder.png” />为我工作,谢谢
Varus Septimus

1a。在文件的“属性”选项卡上,将BuildAction设置为“ Resource”
Richard II
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.