2
数値が80より小さく、塗りつぶしの色が赤で80以上の場合はtextBlockの繰り返しで印刷する必要があります。XAMLで条件文を使用してtextBlockを印刷するにはどうすればよいですか?
どうすればXAMLで行うことができますか?
数値が80より小さく、塗りつぶしの色が赤で80以上の場合はtextBlockの繰り返しで印刷する必要があります。XAMLで条件文を使用してtextBlockを印刷するにはどうすればよいですか?
どうすればXAMLで行うことができますか?
悲しいことに、不等式トリガーなどがないため、コンバーターを使用する必要があります。
<TextBlock>
<TextBlock.Foreground>
<Binding Path="TestDouble">
<Binding.Converter>
<vc:ThresholdConverter BelowValue="{x:Static Brushes.Red}"
AboveValue="{x:Static Brushes.Green}"
Threshold="80" />
</Binding.Converter>
</Binding>
</TextBlock.Foreground>
<TextBlock.Text>
<Binding Path="TestDouble">
<Binding.Converter>
<vc:ThresholdConverter BelowValue="Repeat"
AboveValue="Successful"
Threshold="80" />
</Binding.Converter>
</Binding>
</TextBlock.Text>
</TextBlock>
public class ThresholdConverter : IValueConverter
{
public double Threshold { get; set; }
public object AboveValue { get; set; }
public object BelowValue { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double input;
if (value is double)
{
input = (double)value;
}
else
{
var converter = new DoubleConverter();
input = (double)converter.ConvertFrom(value);
}
return input < Threshold ? BelowValue : AboveValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
<local:NumberToBrushConverter x:Key="numberToBrushConverter" />
<local:NumberToTextConverter x:Key="numberToTextConverter" />
<TextBlock Background="{Binding Number, Converter={StaticResource numberToBrushConverter}}"
Text="{Binding Number, Converter={StaticResource numberToTextConverter}"/>
class NumberToBrushConverter: IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int number = (int)value;
return number < 80 ? Brushes.Red : Brushes.Green;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return Binding.DoNothing;
}
#endregion
}
他のコンバータは、ブラシコンバータに似ていますが、 "成功" または "リピート" を返します。
コンバーターを使用すると、これらの値をプロパティにどのように設定できますか? –
@ oscar.imbres:テキストと同じ値にバインドする必要があります。 (上記の実装例ですが、 'Text'に直接バインドすることもできますが、まずコンバーターが入力値を解析する必要があります)、データバインディングの使い方がわからない場合は[http] ://msdn.microsoft.com/en-us/library/ms752347.aspx)。 –
@ oscar.imbres:一般的なダブルコンバータを使用するように編集しました。これをテキストにバインドすることもできます。 –