Sto cercando di capire il modo migliore per creare uno stile/trigger per impostare il primo piano su Rosso, quando il valore è < 0. qual è il modo migliore per farlo? Sto assumendo DataTrigger, ma come posso verificare il valore negativo, devo creare il mio IValueConverter?WPF TextBlock Numero negativo in rosso
risposta
Se non si utilizza un modello MVVM (dove si può avere una proprietà ForegroundColor), la cosa più semplice da fare è creare un nuovo IValueConverter, associando lo sfondo al valore.
In 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
}
}
Si dovrebbe avere tue informazioni specifiche vista nel vostro ViewModel. Ma puoi eliminare le informazioni specifiche di stile nel ViewModel.
creare qui una proprietà nel ViewModel che restituisce un valore booleano
public bool IsMyValueNegative { get { return (MyValue < 0); } }
e utilizzarlo in un DataTrigger in modo da poter eliminare il ValueConverter e la sua boxe/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>
Concordato che questo sarebbe preferibile. La risposta originale deriva dal fatto che non ha menzionato che stava usando MVVM, e la domanda implicava (per me) che non lo fosse. –
Funzionerebbe, ma il motivo per cui non voglio farlo è perché per ogni TextBlock avrei bisogno di una proprietà separata per ogni blocco di testo (10+ per visualizzazione spesso) –
Solo un piccolo punto sulle convenzioni di denominazione .. Le mie app diventare così pieno di questo tipo di xaml hack che trovo molto più facile chiamarli per scopo. es: public bool DisplayBasketValueInRed {get; impostato; }. Io uso anche (anche se probabilmente non dovrei) una classe generica per ridurre il modo verboso di implementare INotifyPropertyChanged su queste proprietà. –
Per la soluzione di Amsakanna ho dovuto aggiungere un nome di classe al Setter Proprietà:
< Setter proprietà = "TextBlock .Foreground" value = "Red" />
anch'io !. Grazie! – tzippy
- 1. Visualizzazione immagini in TextBlock (WPF)
- 2. Formato WPF DateTime in TextBlock?
- 3. WPF TextBlock sovrappone Ellisse
- 4. WPF: Binding un numero intero a un TextBlock con TemplateBinding
- 5. Come rimuovere il riempimento aggiuntivo da un TextBlock WPF?
- 6. WPF multilinea TextBlock CenterAlignment Problema
- 7. Posso avere più colori in un singolo TextBlock in WPF?
- 8. Impostazione testo WPF per TextBlock
- 9. WPF TextBlock zoom e avvolgere
- 10. TextBlock per visualizzare HTML in WPF
- 11. Allineamento verticale del testo in WPF TextBlock
- 12. WPF: Troncamento automatico del testo in TextBlock
- 13. WPF TextBlock dinamico grassetto e parti italiche
- 14. Si prevede questa prestazione WPF TextBlock lenta?
- 15. C# WPF - ScrollViewer + Problemi di TextBlock
- 16. WPF TextBlock imbottitura è tagliare testo
- 17. WPF Aggiungi un bordo a TextBlock
- 18. Converti numero negativo in numero positivo in template django?
- 19. Math.Exp del numero negativo grande
- 20. Divisione intera per numero negativo
- 21. Ridurre l'interlinea in un TextBlock/FlowDocument
- 22. come cercare il numero negativo in solr?
- 23. Ruby: modifica il numero negativo in numero positivo?
- 24. Impostare TextBlock per essere completamente grassetto quando DataBound in WPF
- 25. Nascondi <Run /> tag in TextBlock - WPF
- 26. Come modificare l'interlinea in TextBlock
- 27. Emulatore Android: inserire il numero negativo?
- 28. Numero di blocco negativo della sezione critica
- 29. Come digitare il numero negativo con .isdigit?
- 30. Facebook Like Mostra un numero negativo
questo dovrebbe funzionare , anche se preferirei creare una sorta di stile (più facile da reimplementare), perché questo non funzionerebbe con MVVM? –
@LnDCobra: Funzionerà con MVVM. Quello che penso Wonko significa che con MVVM puoi scegliere di esporre una proprietà ForegroundColor sul tuo viewmodel invece di usare ValueConverter. –
@Jakob: assolutamente corretto. @LnDCobra: è possibile implementare uno stile, con il valore della proprietà in primo piano impostato sullo stesso legame di cui sopra. –