在XAML中使用Resources.resx中的图像

3

在我的程序中,我有一个名为“test”的资源文件,其中包含图像“test.png”。我想在 XAML 文件中使用它。但当程序运行时我看不到这张图片。

我的代码:

xmlns:r="clr-namespace:ProjectB.Properties"
...
<Image Source="{Binding Source={x:Static r:Resources.test}}" />

"test.png"图片的Build Action属性设置为Resource

编辑:

我想在资源文件中使用图像,以便在不同的全球化环境(与资源文件中的字符串相同)中使用不同的图像。我不知道我尝试的方式是否可行,但最终我像下面的答案建议的那样将图像添加到项目的普通文件夹中,对于资源文件,我添加了图像的路径,XAML文件看起来像这样:

<Image
Source="{Binding Source={x:Static r:Resources.test},
                 Converter={StaticResource StrToImgConv}}" />

你的构建操作是“嵌入式资源”还是只是“资源”? - user12637955
只是资源,但我也尝试了嵌入式资源。 - iknow
2个回答

2

您无需使用Resources.resx,只需将test.png图像添加到您的项目中,例如在“资源”文件夹中,并将构建操作设置为嵌入式资源,然后您就可以在XAML代码中使用它,如下所示。

<Image Source="pack://application:,,,/Resources/test.png" />

如果您在项目中使用了其他文件夹结构,请不要忘记在图像源中进行更改,例如,您希望将图像保存在“资源\图像”文件夹中,则应按如下方式使用源。

<Image Source="pack://application:,,,/Resources/Images/test.png" />

但是我有两个资源文件,因为我的应用程序有两种语言。我想将一个图像添加到Resources.resx中,将另一个具有相同名称但在Resources.pl-PL.resx中的图像添加到其中。是否可以像字符串一样在不同的全球化中使用图像? - iknow
@iknow 你可以使用全球化库或者转换器来构建图像源URI。 - Henka Programmer

1

resources.resx文件完全不必要,因为它是WinForms使用的文件类型,而不是WPF。

  1. 删除您的资源文件(或仅不将其作为源引用)
  2. 保留您的test.png文件,并将其Build Action保持为Resource
  3. 编辑您的xaml为:
xmlns:r="clr-namespace:ProjectB.Properties"
...
<Image Source="Resources/test.png" />

但是我有两个资源文件,因为我的应用程序有两种语言。我想将一个图像添加到Resources.resx中,将另一个具有相同名称但在Resources.pl-PL.resx中的图像添加到其中。是否可以像字符串一样在不同的全球化中使用图像? - iknow
如果没有看到更多的代码,很难确定你在做什么,而且你所问的问题超出了原始问题的范围。你也没有说明你使用的两种语言是什么。话虽如此,如果你的应用程序依赖于具有共享资源的两种不同语言,那么你首要解决的问题是找到两种语言都可以使用的基本格式。我几乎可以保证,resx 文件不是你想要的解决方案。 - Tam Bui

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