2011-08-12 16 views

答えて

3

Converters

悲しいことに、不等式トリガーなどがないため、コンバーターを使用する必要があります。

<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(); 
    } 
} 
+0

コンバーターを使用すると、これらの値をプロパティにどのように設定できますか? –

+0

@ oscar.imbres:テキストと同じ値にバインドする必要があります。 (上記の実装例ですが、 'Text'に直接バインドすることもできますが、まずコンバーターが入力値を解析する必要があります)、データバインディングの使い方がわからない場合は[http] ://msdn.microsoft.com/en-us/library/ms752347.aspx)。 –

+0

@ oscar.imbres:一般的なダブルコンバータを使用するように編集しました。これをテキストにバインドすることもできます。 –

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

他のコンバータは、ブラシコンバータに似ていますが、 "成功" または "リピート" を返します。

関連する問題