如何更改数据绑定列表中的png图像颜色

时间:2011-07-26 08:08:46

标签: silverlight xaml windows-phone

我有一个绑定列表,可以在每个项目上显示不同的图像。 我知道我们可以通过以下方式更改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"/>

有人可以帮助我吗?

1 个答案:

答案 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();
    }
}

那就是说,我建议使用矢量图形(即绘图)而不是图像。