C# 带有静态资源的XAML图像源

C# 带有静态资源的XAML图像源,c#,wpf,xaml,C#,Wpf,Xaml,我的项目中有很多图像,这就是我在解决方案中创建图像资源的原因我引用了所有这些图像,如下所示: 然后我在我的XAML中引用如下: <Image x:Name="ImgFail" Grid.Row="1" Grid.ColumnSpan="2" Source="{x:Static img:Imagenes.IMG_FailStamp}"/> 这样,它在运行时抛出一个错误不是“sour

我的项目中有很多图像,这就是我在解决方案中创建图像资源的原因我引用了所有这些图像,如下所示:

然后我在我的XAML中引用如下:

    <Image 
        x:Name="ImgFail"
        Grid.Row="1"
        Grid.ColumnSpan="2"            
        Source="{x:Static img:Imagenes.IMG_FailStamp}"/>

这样,它在运行时抛出一个错误不是“source”属性的有效值

但如果直接引用图像,如下所示:

    <Image 
        x:Name="ImgOk"
        Grid.Row="1"
        Grid.ColumnSpan="2"            
        Source="/||||||||.Recursos.Imagenes;component/Resources/Ok-PNG-Pic.png"/>

它起作用了


如何使用静态资源正确设置图像源

那是因为当你

Source="{x:Static img:Imagenes.IMG_FailStamp}"
这是这样编译的:

img.Source = Imagenes.IMG_FailStamp
Source="{Binding Source={x:Static img:Imagenes.IMG_FailStamp}, Mode=OneTime}"
但是
Image.Source
的类型是
ImageSource
,而您的
IMG\u FailStamp
的类型是
string
-这不会编译。但当你这样做的时候:

Source="/||||||||.Recursos.Imagenes;component/Resources/Ok-PNG-Pic.png"
它是不同的-现在您的字符串将通过
ImageSourceConverter
,并将其转换为有效的
ImageSource
(因此将读取您的文件并从中创建源代码)

因此,当您使用
x:Static
-您只需直接告诉要使用的值,而不涉及转换器。因此,如果要使用
x:Static
,则目标属性的类型应为
ImageSource

如果仍要在资源中存储图像路径,请执行以下操作:

  • 打开resources.resx文件,将顶部的访问修饰符从“internal”更改为“public”。这将使
    Imagenes.IMG\u FailStamp
    成为公共属性

  • 像这样绑定它:

    img.Source = Imagenes.IMG_FailStamp
    
    Source="{Binding Source={x:Static img:Imagenes.IMG_FailStamp}, Mode=OneTime}"
    

  • Binding将运行必要的转换器,图像将显示良好。

    Tks以获取帮助。这意味着必须编写一个从字符串到ImageSource的转换器?@JuanPabloGomez我已经用一种方法更新了答案,使它在您的场景中工作。