Отрицательное число WPF TextBlock в Красном

Я пытаюсь выяснить лучший способ создать стиль/триггер для установки переднего плана на Красного, когда значение <0. что лучший способ состоит в том, чтобы сделать это? Я принимаю DataTrigger, но как я могу проверить на отрицательную величину, я должен создать свой собственный IValueConverter?

8
задан Dave Clemmer 15 August 2011 в 15:59
поделиться

2 ответа

Если вы не используете модель MVVM (где у вас может быть свойство ForegroundColor), то проще всего создать новый IValueConverter, привязав ваш фон к вашему значению.

В MyWindow.xaml:

<Window ...
    xmlns:local="clr-namespace:MyLocalNamespace">
    <Window.Resources>
        <local:ValueToForegroundColorConverter x:Key="valueToForeground" />
    <Window.Resources>

    <TextBlock Text="{Binding MyValue}"
               Foreground="{Binding MyValue, Converter={StaticResource valueToForeground}}" />
</Window>

ValueToForegroundColorConverter.cs

using System;
using System.Windows.Media;
using System.Windows.Data;

namespace MyLocalNamespace
{
    class ValueToForegroundColorConverter: IValueConverter
    {
        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            SolidColorBrush brush = new SolidColorBrush(Colors.Black);

            Double doubleValue = 0.0;
            Double.TryParse(value.ToString(), out doubleValue);

            if (doubleValue < 0)
                brush = new SolidColorBrush(Colors.Red);

            return brush;
        }

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

        #endregion
    }
}
14
ответ дан 5 December 2019 в 05:55
поделиться

У вас должна быть информация о вашем представлении в вашей ViewModel. Но вы можете избавиться от информации о стиле во ViewModel.

Следовательно, создайте свойство в ViewModel, которое будет возвращать значение типа bool

public bool IsMyValueNegative { get { return (MyValue < 0); } }

, и используйте его в DataTrigger, чтобы вы могли исключить ValueConverter и его упаковку / распаковку.

<TextBlock Text="{Binding MyValue}"> 
  <TextBlock.Style> 
    <Style> 
      <Style.Triggers> 
        <DataTrigger Binding="{Binding IsMyValueNegative}" Value="True"> 
          <Setter Property="Foreground" Value="Red" /> 
        </DataTrigger> 
      </Style.Triggers> 
    </Style> 
  </TextBlock.Style> 
</TextBlock> 
8
ответ дан 5 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

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