【问题标题】:How to reference image resources in XAML?如何在 XAML 中引用图像资源?
【发布时间】:2011-04-05 13:29:06
【问题描述】:

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

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

【问题讨论】:

    标签: wpf


    【解决方案1】:

    如果图像位于您的资源文件夹中并且其构建操作设置为资源。您可以按如下方式在 XAML 中引用图像:

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

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

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

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

    【讨论】:

    • “pack”命名空间代表什么?
    • 这里是关于 pack uri 的信息:msdn.microsoft.com/en-us/library/…
    • 我已经有一段时间没有在我的应用程序中添加图像了...我可能会在这里感到厌烦,但我认为您可能需要先构建应用程序才能在 WPF 设计器中显示图像。
    • 我现在无法测试它,但从上面的 MSDN 链接中,对于引用的程序集,它说使用:“/ReferencedAssembly;component/Subfolder/ResourceFile.xaml”。其中“ReferencedAssembly”将是您的程序集名称。我编写了如下代码:“/MyProgram.Namespace;component/Resources/imagename.png”
    • @wonea 为我工作:"pack://application:,,,/YourAppName;component/Resources/FileDialog.png" 与构建操作 "Resource"
    【解决方案2】:

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

    【讨论】:

    • 这里有一个细微的变化:&lt;Image Source="/Icons/play_small.png" /&gt; 请注意开头的正斜杠,这意味着查看根文件夹。如果 xaml 文件不在根目录下,这是必要的,因为没有正斜杠,它将在与 xaml 文件相同的目录中开始搜索。
    【解决方案3】:

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

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

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:UI="clr-namespace:UI.Images" 
    

    像这样设置你的图片来源:

    &lt;Image Source={Binding {x:Static UI:Resources.Search}} /&gt; 其中“搜索”是资源的名称。

    【讨论】:

    【解决方案4】:
    1. 将文件夹添加到您的项目中,并通过“现有项目”将图像添加到这些项目中。
    2. 与此类似的 XAML:&lt;Image Source="MyRessourceDir\images\addButton.png"/&gt;
    3. F6(构建)

    【讨论】:

    • 为我工作,谢谢
    • 1a。在文件的属性选项卡上,将 BuildAction 设置为“资源”
    猜你喜欢
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2015-12-21
    • 2021-11-10
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多