我有两个.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。
我只是想知道如何提取该值而无需在存储的目录中寻址图像的路径。 (老实说,我不确定这是不对的,因为我在网上找不到任何类似的情况。)
如果有可用的话,请告诉我是否有一个首选方法。
答案 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}}来获取源代码。
我更喜欢第一种方法。