Как изменить цвет переднего плана индикатора выполнения на основе его значения в зависимости от диапазона, в котором находится текущее значение - PullRequest
4 голосов
/ 23 февраля 2012

Я уже проверил приведенный ниже вопрос, но не получил полностью, так как я новичок в WPF. Есть ли способ изменить цвет индикатора выполнения WPF путем привязки к свойству модели представления

Если у вас есть образец, сообщите мне.

Ответы [ 2 ]

10 голосов
/ 23 февраля 2012

Вы можете привязать свойство Foreground ProgressBar к его свойству Value, используя преобразователь значений , который преобразует из double в Brush, как показано в примере ниже. Обратите внимание, что для тестирования свойство ProgressBar Value также связано, в частности со свойством Value элемента управления Slider.

<Window.Resources>
    <local:ProgressForegroundConverter x:Key="ProgressForegroundConverter"/>
</Window.Resources>
<StackPanel>
    <ProgressBar Margin="10"
                 Value="{Binding ElementName=progress, Path=Value}"
                 Foreground="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Value, Converter={StaticResource ProgressForegroundConverter}}"/>
    <Slider Name="progress" Margin="10" Minimum="0" Maximum="100"/>
</StackPanel>

Преобразователь значений привязки может выглядеть следующим образом:

public class ProgressForegroundConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        double progress = (double)value;
        Brush foreground = Brushes.Green;

        if (progress >= 90d)
        {
            foreground = Brushes.Red;
        }
        else if (progress >= 60d)
        {
            foreground = Brushes.Yellow;
        }

        return foreground;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
0 голосов
/ 19 августа 2018

Клеменс раствор не работает. Чтобы устранить проблему с пустым цветом, в коде конвертера возвращаем что-то вроде:

return   new SolidColorBrush (Colors.Red);

в отличие от Bushes.Red

...