Inverser une couleur en XAML via un Converter19 octobre 2011

Design

Voici un exemple assez simple permettant de créer une SolidColorBrush de couleur inverse via un Converter en XAML.

Seul le Convert du IValueConverter nécessite d’être implémenté ici.

class ReverseBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var brush = value as SolidColorBrush;

        if (brush == null) return Binding.DoNothing;
        return new SolidColorBrush(ReverseColor(brush.Color));
    }

    private Color ReverseColor(Color color)
    {
        return Color.FromArgb(color.A, (byte)(255 - color.R), (byte)(255 - color.G),
                                (byte)(255 - color.B));
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Le canal Alpha n’est pas modifié ici afin d’éviter d’avoir des couleurs transparentes lors de l’inversion de couleurs pleines. Mais vous pouvez adapter le code pour prendre en charge certains cas particuliers.

Source : ReverseBrushConverter