Member 12658724 Ответов: 1

Привязка свойств переднего плана не работает


У меня есть текстовый блок, цвет переднего плана текста должен изменяться по значению. Однако это не очень хорошо работает.

<TextBlock Text="{Binding Path=Foo}" 
           Foreground="{Binding Path=Foo, Converter={StaticResource myConverter}" />


Часть конвертера любит
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var temp = (int)value;
        if (temp <100 && temp>50)
        {
           return "#ff23d3";
        }
       if(temp>200)
           return "da2367";
       return new SolidBrush(Colors.Green);
    }

Но хотя значения различны, он возвращает только один цвет.

Что я уже пробовал:

Я установил точку останова в коде. Он действительно достиг нужного места.
Может быть, преобразование типов неверно?

Kenneth Haugland

С чем он связан? Вы реализовали INotifyChanged на этом свойстве?

1 Ответов

Рейтинг:
5

Graeme_Grant

Перво-наперво, это Передний план[^] свойство зависимостей[^] из каких-либо Управление WPF[^] ожидает а Щетка[^].

Вооружившись этим знанием, мы теперь можем посмотреть на ваш конвертер:

public object Convert(object value,
                      Type targetType,
                      object parameter,
                      System.Globalization.CultureInfo culture)
{
    var temp = (int)value;
    if (temp <100 && temp>50)
    {
       return "#ff23d3";
    }
    if(temp>200)
       return "da2367";
    return new SolidBrush(Colors.Green);
}


1. "#ff23d3" = строковое шестнадцатеричное значение цвета (не цветной объект), ни одной щетки в любом виде.

2. "da2367" являться строкой. Не такой, как первый, но все же ни одной щетки.

3. new SolidBrush(Colors.Green) - Это сплошной цвет Щетка- Это сработает.

Итак, чтобы исправить это, вам нужно преобразовать значение цвета в Класс цвета[^] который можно использовать с помощью кисти:
using System.Windows.Media;

Color color = (Color)ColorConverter.ConvertFromString("#FFFF23D3");

Теперь, когда у вас есть цветной объект, вы можете применить его к Как solidcolorbrush[^]:
return new SolidBrush(color);

Таким образом, ваш фиксированный конвертер будет выглядеть следующим образом:
public object Convert(object value,
                     Type targetType,
                     object parameter,
                     System.Globalization.CultureInfo culture)
{
    var temp = (int)value;

    if (temp <100 && temp>50)
       return new SolidColorBrush(
           (Color)ColorConverter
               .ConvertFromString("#FFFF23D3"));

    if(temp>200)
       return new SolidColorBrush(
           (Color)ColorConverter
               .ConvertFromString("#FFDA2367"));

       return new SolidColorBrush(Colors.Green);
}


Member 12658724

Что-то не так с кодом new SolidBrush(
(Color)ColorConverter
.ConvertFromString("#FFFF23D3"));

"Цвет" - это тип, который не является допустимым в данном контексте.

Graeme_Grant

Я написал код с макушки моей головы (непроверенный). Один раз ТИК...

правка: опечатка ... скопирована из вашего кода ... измените SolidBrush на SolidColorBrush ... извиняюсь. SolidBrush-это GDI+, а не система.Окна.Медиа (WPF)