【发布时间】:2011-04-05 13:29:06
【问题描述】:
我在一个窗口上放置了一个Image 控件,我想显示一个存储在名为“Resources.resx”的项目资源文件中的图像。资源文件中图像的名称是“搜索”。
有人可以告诉我如何去做吗?
【问题讨论】:
标签: wpf
我在一个窗口上放置了一个Image 控件,我想显示一个存储在名为“Resources.resx”的项目资源文件中的图像。资源文件中图像的名称是“搜索”。
有人可以告诉我如何去做吗?
【问题讨论】:
标签: wpf
如果图像位于您的资源文件夹中并且其构建操作设置为资源。您可以按如下方式在 XAML 中引用图像:
"pack://application:,,,/Resources/Search.png"
假设您在 Resources 文件夹下没有任何文件夹结构并且它是一个应用程序。例如我使用:
ImageSource="pack://application:,,,/Resources/RibbonImages/CloseButton.png"
当我在 Resources 文件夹下有一个名为 RibbonImages 的文件夹时。
【讨论】:
如果你的项目的 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;
【讨论】:
<Image Source="/Icons/play_small.png" /> 请注意开头的正斜杠,这意味着查看根文件夹。如果 xaml 文件不在根目录下,这是必要的,因为没有正斜杠,它将在与 xaml 文件相同的目录中开始搜索。
使用资源文件的好处之一是通过名称访问资源,因此图像可以更改,图像名称可以更改,只要资源保持最新,就会显示正确的图像。
这里有一个更简洁的方法来实现这一点: 假设 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}} /> 其中“搜索”是资源的名称。
【讨论】:
<Image Source="MyRessourceDir\images\addButton.png"/>
【讨论】: