在我的项目中,我有一个名为Images的文件夹,其中我在我的应用程序中使用的所有图像都保存在子文件夹中。所有图像都在构建过程中设置为“资源”。
myproject
|__Images
|__AppImages
|__StarOn.png
|__StarOff.png
现在,如果我像这样手动设置我的图像:
<Image Source="Images\AppImages\StarOn.png" width="32" height="32"/>
图像在图像框中正确显示。
我想使用转换器和这样的绑定来设置图像:
<Image>
<Image.Source>
<Binding Path="Number" converter="{StaticResource GetImagePathConverter}"/>
</Image.Source>
</Image>
其中数字是整数
我的转换器是:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int questionNr=int.parse(value.ToString());
if (questionNr>100)
{
return "Images\\AppImages\\StarOn.png";
}
return "Images\\AppImages\\starOff.png";
}
但这不是改变图像吗?..
我做错了什么? 如何从转换器中正确设置图像源?
提前致谢
答案 0 :(得分:4)
您使用转换器的方式不正确。您需要创建转换器的实例,通过StaticResource
在绑定中使用它。 local:
是您需要在xaml中声明的本地命名空间 -
<Image>
<Image.Resources>
<local:GetImagePathConverter x:Key="GetImagePathConverter"/>
</Image.Resources>
<Image.Source>
<Binding Path="Number" Converter="{StaticResource GetImagePathConverter}"/>
</Image.Source>
</Image>
此外,Source
属性不是字符串类型,而是ImageSource
,因此您需要转换器中的某些内容 -
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int questionNr=int.parse(value.ToString());
if (questionNr>100)
{
return new BitmapImage(new Uri("Images\\AppImages\\StarOn.png", UriKind.Relative));
}
return new BitmapImage(new Uri("Images\\AppImages\\StarOff.png", UriKind.Relative));
}
答案 1 :(得分:0)
请参阅this answer。
基本上,您必须处理在转换器中返回的对象类型,而不能将string
返回到ImageSource
类型的属性。
我不在我的开发机器上,但代码是这样的:
return new BitmapImage(new Uri(the/path/to/image.png)).Source; //or '*.ImageSource', can't remember