代码之家  ›  专栏  ›  技术社区  ›  Michal Ciechan

WPF TextBlock红色负数

  •  8
  • Michal Ciechan  · 技术社区  · 15 年前

    3 回复  |  直到 14 年前
        1
  •  14
  •   fruggiero    7 年前

    如果您不使用MVVM模型(其中可能有ForegroundColor属性),那么最简单的方法就是创建一个新的IValueConverter,将您的背景绑定到您的值。

    <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>
    

    值foregroundColorConverter.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
        }
    }
    
        2
  •  8
  •   Amsakanna    15 年前

    您应该在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> 
    
        3
  •  6
  •   Erik K.    13 年前

    对于Amsakanna的解决方案,我必须向属性Setter添加一个类名:

    <Setter属性=“ 控件 .Foreground“Value=”红色“/>