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

Hos*_*146 73 wpf

Image在Window上设置了一个控件,我想显示一个存储在名为"Resources.resx"的项目资源文件中的图像.资源文件中的图像名称为"搜索".

有人能告诉我如何做到这一点吗?

Viv*_*Viv 107

如果图像位于资源文件夹中,并且其构建操作设置为"资源".您可以在XAML中引用图像,如下所示:

"pack://application:,,,/Resources/Search.png"
Run Code Online (Sandbox Code Playgroud)

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

ImageSource="pack://application:,,,/Resources/RibbonImages/CloseButton.png"
Run Code Online (Sandbox Code Playgroud)

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

  • 我现在无法测试它,但是从上面的MSDN链接,对于引用的程序集,它说使用:"/ ReferencedAssembly ;component/Subfolder/ResourceFile.xaml".其中"ReferencedAssembly"将是您的程序集名称.我编写了类似的代码:"/ MyProgram.Namespace; component/Resources/imagename.png" (3认同)
  • 这里是关于包uri的信息:http://msdn.microsoft.com/en-us/library/aa970069(v = VS.90).aspx #The_Pack_URI_Scheme (2认同)
  • 我已经有一段时间了,因为我在我的应用程序中添加了图像...我可能会在这里工作,但我认为您可能需要在WPF设计器中显示图像之前构建应用程序. (2认同)
  • @wonea 这对我有用:“pack://application:,,,/YourAppName;component/Resources/FileDialog.png”,带有构建操作“Resource” (2认同)

Ran*_*ngy 27

如果您在项目的Icons文件夹中有一个图像,并且其构建操作是"Resource",您可以像这样引用它:

<Image Source="/Icons/play_small.png" />
Run Code Online (Sandbox Code Playgroud)

这是最简单的方法.这是我唯一可以从资源角度完全做到这一点并且没有项目文件的方法:

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;
Run Code Online (Sandbox Code Playgroud)

  • 这有一点点变化:`<Image Source ="/ Icons/play_small.png"/>`注意开头的正斜杠,这意味着查看根文件夹.如果xaml文件不在根目录,则必须这样做,因为没有正斜杠,它将在与xaml文件相同的目录中开始搜索. (17认同)

Shr*_*and 8

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

这是一个更简洁的方法来实现这一点:假设Resources.resx在'UI.Images'命名空间中,在你的xaml中添加命名空间引用,如下所示:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:UI="clr-namespace:UI.Images" 
Run Code Online (Sandbox Code Playgroud)

像这样设置你的Image源:

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

  • 实际上这似乎不适用于图像,因为资源正在使用System.Drawing.Bitmap (2认同)

小智 5

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