wpf triggers styles textblock datatrigger

Número negativo de WPF TextBlock en rojo



triggers styles (3)

Debería tener su información específica de vista en su ViewModel. Pero puede deshacerse de la información específica de Style en ViewModel.

Por lo tanto, cree una propiedad en ViewModel que devuelva un valor bool

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

Y úselo en un DataTrigger para que pueda eliminar ValueConverter y su boxeo / unboxing.

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

Estoy tratando de encontrar la mejor manera de crear un estilo / disparador para establecer el primer plano en rojo, cuando el valor es <0. ¿cuál es la mejor manera de hacer esto? Asumo DataTrigger, pero ¿cómo puedo verificar el valor negativo? ¿Tengo que crear mi propio IValueConverter?


Para la solución de Amsakanna, tuve que agregar un nombre de clase al Property Setter:

<Setter Property = " TextBlock .Foreground" Valor = "Rojo" />


Si no está utilizando un modelo MVVM (donde puede tener una propiedad ForegroundColor), entonces lo más fácil es crear un nuevo IValueConverter, vinculando su fondo a su valor.

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