Как я преобразовываю Цвет в Кисть в XAML?

Я хочу преобразовать Систему. Windows. Медиа. Значение цвета к Системе. Windows. Медиа. Кисть. Значение цвета связано с данными к Прямоугольному Свойству заливки объекта. Свойство заливки берет объект Кисти, таким образом, мне нужен объект IValueConverter выполнить преобразование.

Существует ли встроенный преобразователь в WPF, или я должен создать свое собственное? Как я иду о создании моего собственного, если это становится необходимым?

49
задан dthrasher 22 July 2010 в 03:06
поделиться

1 ответ

Похоже, вам нужно создать свой конвертер. Вот простой пример для начала:

public class ColorToSolidColorBrushValueConverter : IValueConverter {

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        if (null == value) {
            return null;
        }
        // For a more sophisticated converter, check also the targetType and react accordingly..
        if (value is Color) {
            Color color = (Color)value;
            return new SolidColorBrush(color);
        }
        // You can support here more source types if you wish
        // For the example I throw an exception

        Type type = value.GetType();
        throw new InvalidOperationException("Unsupported type ["+type.Name+"]");            
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        // If necessary, here you can convert back. Check if which brush it is (if its one),
        // get its Color-value and return it.

        throw new NotImplementedException();
    }
}

Чтобы использовать его, объявите его в разделе ресурсов.

<local:ColorToSolidColorBrushValueConverter  x:Key="ColorToSolidColorBrush_ValueConverter"/>

И использовать его в привязке как статический ресурс:

Fill="{Binding Path=xyz,Converter={StaticResource ColorToSolidColorBrush_ValueConverter}}"

Я не тестировал. Сделайте комментарий, если он не работает.

63
ответ дан 7 November 2019 в 11:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: