如何获取存储在资源中的图像的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_。我只想知道如何提取该值,而无需在存储图像的目录中寻址图像的路径。(老实说,我不确定这样做是否正确,因为我在网上找不到任何类似的情况)。
如果可以的话,请告诉我是否有比我尝试使用的方法更可取的方法。
在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位置,而不是位图对象。
或者,如果您坚持将其存储为位图,则可以通过返回类型为ImageSource
的Properties.Resources.LedGreen.ImageSource
来获取源。
我更喜欢第一种方法。