我有一个绑定列表,可以在每个项目上显示不同的图像。 我知道我们可以通过以下方式更改png图像颜色:
<Rectangle Height="100" Width="100" Fill="{StaticResource PhoneForegroundBrush}">
<Rectangle.OpacityMask>
<ImageBrush ImageSource="/Images/folder.png" Stretch="None"/>
</Rectangle.OpacityMask>
</Rectangle>
但这是针对指定的图像,我想要做的是对数据绑定图像应用相同的效果。喜欢:
<Image Height="100" Width="100" Source="{Binding IconSource}" Stretch="None"/>
有人可以帮助我吗?
答案 0 :(得分:2)
是的,因为你无法绑定到ImageBrush,这是一个解决方法:
<Rectangle Width="100"
Height="100"
Fill="{StaticResource PhoneForegroundBrush}"
OpacityMask="{Binding IconSource, Converter={StaticResource ImageToOpacityMaskValueConverter}}" />
使用以下转换器:
public class ImageToOpacityMaskValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is Uri)
{
var image = new BitmapImage((Uri)value);
if (image != null)
{
var imageBrush = new ImageBrush()
{
ImageSource = image
};
return imageBrush;
}
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
那就是说,我建议使用矢量图形(即绘图)而不是图像。