Как изменить цвет изображения png в списке данных - PullRequest
1 голос
/ 26 июля 2011

У меня есть связанный список, который будет показывать разные изображения для каждого элемента. Я знаю, что мы могли бы изменить цвет изображения 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 Ответ

2 голосов
/ 26 июля 2011

Точно, так как вы не можете привязать к 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();
    }
}

Тем не менее, я бы рекомендовал использовать векторную графику (т.е. рисунок) вместо изображения.

...