2017-03-15 6 views
1
WPF: 

<Grid> 
    <Button Panel.ZIndex="-5" Background="{Binding CardColour}"></Button> 
    <Slider x:Name="HomeCardSlider" Height="30" Width="25" Maximum="2" SmallChange="1" Orientation="Vertical" Value="{Binding CardState}" HorizontalAlignment="Right" VerticalAlignment="Center" BorderBrush="#FFF94F0F"> 
    </Slider> 
</Grid> 

クラス:はどのようにスライダ値がWPFに基づいてボタンの背景色を更新する

public class LiveComm 
{ 
    public int CardState { get; set; } 
    public string CardColour { get; set; } 
} 

私はスライダーの値に基づいて、ボタンの色を更新しようとしています。値が0の場合、ボタンの色はグレー、1は黄色、2は赤です。

答えて

2

状態数が少ない(0,1,2)ので、トリガーでビューモデルなしで行うことができます。ボタンスタイルのトリガースライダーの値を変更し、それに応じて背景を変更します。

<Button Panel.ZIndex="-5"> 
    <Button.Style> 
     <Style TargetType="Button"> 
      <Setter Property="Background" Value="Gray"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=Value, ElementName=HomeCardSlider}" 
          Value="1"> 
        <Setter Property="Background" Value="Yellow"/> 
       </DataTrigger> 

       <DataTrigger Binding="{Binding Path=Value, ElementName=HomeCardSlider}" 
          Value="2"> 
        <Setter Property="Background" Value="Red"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 
<Slider x:Name="HomeCardSlider" 
     IsSnapToTickEnabled="True" 
     Height="30" Width="25" 
     Maximum="2" SmallChange="1" 
     Orientation="Vertical" 
     HorizontalAlignment="Right" VerticalAlignment="Center" BorderBrush="#FFF94F0F"> 
</Slider> 

私はスライダーのためIsSnapToTickEnabled="True"を設定し、ノート、それは非整数値を取得することができそう

+0

私は私のオブジェクトが結合するための値=「{バインディングCardStateを}」バックに入れているこれは私が戻ってそれを置く何も影響を与えますそれは機能しますが、あなたがそれを削除したので、私はちょうど興味があります。 – Decoder94

+1

@ Decoder94、 'Value =" {CardStateをバインドする ""は、他のロジックがCardStateに依存する場合に便利なDataContextのCardStateプロパティを更新します。トリガーがSlider値に直接バインドされている場合、Buttonには影響しません。 – ASh

関連する問題