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

本文关键字:资源 图像 Uri 存储 何获取 获取 | 更新日期: 2023-09-27 17:57:27

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

我的xaml代码如下:

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

使用ImagePath的CCD_ 3代码为:

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

然而

Properties.Resources.LedGreen

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

如果可以的话,请告诉我是否有比我尝试使用的方法更可取的方法。

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

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

相反,您只需将图像文件作为常规文件添加到Visual Studio项目中,可能是在名为"Images"之类的文件夹中。然后将其Build Action设置为Resource,这是在"属性"窗口中完成的。例如,右键单击图像文件并选择Properties菜单项即可到达。注意,无论如何,对于图像文件,Build Action的默认值应该是Resource

为了从代码中访问这些图像资源,您将使用Pack URI。使用上面的文件夹名称"Images"和一个名为"LedGreen.png"的图像文件,创建这样一个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>

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

或者,如果您坚持将其存储为位图,则可以通过返回类型为ImageSourceProperties.Resources.LedGreen.ImageSource来获取源。

我更喜欢第一种方法。