如何获取存储在资源中的图像的Uri

时间:2014-04-09 07:11:32

标签: c# wpf xaml binding resources

我有两个.png文件添加到我的资源中,我需要在进行绑定时访问它们的Uri。

我的xaml代码如下:

<Grid>
  <Image>
    <Image.Source>
       <BitmapImage DecodePixelWidth="10" UriSource="{Binding Path=ImagePath}"/>
    </Image.Source>
  </Image> 
</Grid>

使用 ImagePath binding代码为:

ImagePath = resultInBinary.StartsWith("1") ? Properties.Resources.LedGreen : Properties.Resources.ledRed;

然而

Properties.Resources.LedGreen

返回Bitmap而不是String,其中包含该特定图片的Uri。 我只是想知道如何提取该值而无需在存储的目录中寻址图像的路径。 (老实说,我不确定这是不对的,因为我在网上找不到任何类似的情况。)

如果有可用的话,请告诉我是否有一个首选方法。

2 个答案:

答案 0 :(得分:25)

在WPF应用程序中,您通常不会将图像存储在Properties/Resources.resx中,并通过Properties.Resources类访问它们。

相反,您只需将图像文件作为常规文件添加到Visual Studio项目中,也可以在名为&#34; Images&#34;的文件夹中添加。等等。然后,您可以将Build Action设置为Resource,这在“属性”窗口中完成。你去那里,例如右键单击图像文件,然后选择Properties菜单项。请注意,对于图像文件,Build Action的默认值应为Resource

要从代码访问这些图像资源,您可以使用Pack URI。使用上面的文件夹名称&#34; Images&#34;和一个名为&#34; LedGreen.png&#34;的图像文件,创建这样的URI将如下所示:

var uri = new Uri("pack://application:,,,/Images/LedGreen.png");

所以你可以声明你的财产属于Uri类型:

public Uri ImageUri { get; set; } // omitted INotifyPropertyChanged implementation

并将其设置为:

ImageUri = resultInBinary.StartsWith("1")
         ? new Uri("pack://application:,,,/Images/LedGreen.png")
         : new Uri("pack://application:,,,/Images/LedRed.png");

最后你的XAML应该如下所示,它依赖于从Uri到ImageSource的内置类型转换:

<Grid>
    <Image Width="10" Source="{Binding Path=ImageUri}" />
</Grid>

答案 1 :(得分:1)

Properties.Resources.LedGreen属性声明为ImageSource并将其设置为Uri位置而不是Bitmap对象。

或者,如果您坚持将其存储为位图,则可以通过返回类型为Properties.Resources.LedGreen.ImageSource的{​​{1}}来获取源代码。

我更喜欢第一种方法。