2009-11-23 13 views
5

にトリガー:スタイルはそうのようにSilverlightでトリガ、私はスタイルを使用しようとしていますシルバー

<Path Canvas.Top="20" Stroke="#FF808080" Data="M 0,20 20,0 40,20 Z" StrokeLineJoin="Round"> 
     <Path.Style> 
      <Style TargetType="{x:Type Path}"> 
       <Setter Property="Fill" Value="DarkGray"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=userControl, Path=PumpRunning}" Value="True"> 
         <Setter Property="Fill" Value="DarkGreen"/>   
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Path.Style> 
    </Path> 

私はポンプが作動しているかどうか、パスのフィル値が変化するので、これをやりたいです。問題は、Silverlightではスタイルトリガーがサポートされていないことです。

これはとにかくラウンドですか?コードでこれを行う方法はありますか?私はそれを見ているが、私は困惑している。

おかげ

イアン

答えて

13

カスタム値コンバータは、同様の目標を達成します。代わりに、このコンバータで

public class BoolToBrushConverter : IValueConverter 
{ 
    public Brush FalseBrush { get; set; } 
    public Brush TrueBrush { get; set; } 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
    if (value == null) 
    return FalseBrush; 
    else 
    return (bool)value ? TrueBrush : FalseBrush; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
    throw new NotImplementedException("This converter only works for one way binding"); 
    } 
} 

あなたのXAMLを調整することができた: - あなたの色の選択は、あなたのパス定義に地元だったので、私は直接にコンバーターのインスタンスを埋め込んだことを

<Path Canvas.Top="20" Stroke="#FF808080" Data="M 0,20 20,0 40,20 Z" StrokeLineJoin="Round"> 
    <Path.Fill> 
    <Binding Path="PumpRunning" ElementName="userControl"> 
    <Binding.Converter> 
    <local:BoolToBrushConverter 
     FalseBrush="DarkGray" TrueBrush="DarkGreen" /> 
    </Binding.Converter> 
    </Binding> 
    </Path.Fill> 
</Path> 

注意私のパス定義は、同じ意味を達成する。ただし、同じペアカラーを使用してこれらの変換をいくつか行う必要がある場合は、Converterインスタンスをページリソースに簡単に配置し、通常の省略表現のバインディング構文を使用することもできます。