具有静态资源的XAML图像源

时间:2017-04-05 15:29:01

标签: c# wpf xaml

我的项目中有很多图像,这就是为什么我在我的解决方案中创建了一个图像资源我引用了所有这些图像:

enter image description here

然后我在我的XAML中引用:

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

这样会在运行时抛出错误不是'source'property的有效值

但如果直接引用图像:

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

有效。

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

1 个答案:

答案 0 :(得分:1)

那是因为你做的时候

Source="{x:Static img:Imagenes.IMG_FailStamp}"

这是像这样编译的粗鲁:

img.Source = Imagenes.IMG_FailStamp

Image.Source的类型为ImageSourceIMG_FailStamp的类型为string - 这不会编译。但是当你这样做时:

Source="/||||||||.Recursos.Imagenes;component/Resources/Ok-PNG-Pic.png"

它有所不同 - 现在您的字符串将通过ImageSourceConverter并将其转换为有效ImageSource(因此将读取您的文件并从中创建源代码)。

因此,当您使用x:Static时 - 您只需直接告诉使用什么值,并且不涉及转换器。因此,如果您想使用x:Static - 目标属性应为ImageSource类型。

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

  1. 打开resources.resx文件,并在&#34;内部&#34;顶部更改访问修饰符。公共&#34;。这将使Imagenes.IMG_FailStamp公共财产。

  2. 这样绑定:

    Source="{Binding Source={x:Static img:Imagenes.IMG_FailStamp}, Mode=OneTime}"
    
  3. 绑定将运行必要的转换器,图像将显示正常。