値が < 0 の場合に、フォアグラウンドを赤に設定するスタイル/トリガーを作成する最良の方法を見つけようとしています。これを行う最良の方法は何ですか? DataTrigger を想定していますが、負の値を確認するにはどうすればよいですか?独自の IValueConverter を作成する必要がありますか?
10099 次
3 に答える
14
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
}
}
于 2010-07-08T15:26:10.740 に答える
9
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>
于 2010-07-09T11:19:17.543 に答える
6
Amsakanna のソリューションでは、Property Setter にクラス名を追加する必要がありました。
<Setter Property=" TextBlock .Foreground" Value="Red" />
于 2012-03-14T20:33:11.807 に答える