2017-11-29 3 views
-1

トグルボタンを2つずつお互いにリセットする必要があります。ラジオボタンに似ていますが、トライステートです。すなわち相互トグルボタン - トグルを使用してトライステートを表現するために2つのトグルボタンを使用

  • ボタン1は
  • ボタン2が
  • なし私は、次の試してみました

を確認されていないチェックされてチェックされます。

<ToggleButton x:Name="Button1" IsEnabled="{Binding IsConnected}"> 
     <ToggleButton.Style> 
      <Style TargetType="ToggleButton" BasedOn="{StaticResource DetailedSettingsButtonStyle}" > 
       <Setter Property="IsChecked" Value="False" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=Button2, Path=IsChecked}" Value="True"> 
         <Setter Property="IsChecked" Value="False" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ToggleButton.Style> 
    </ToggleButton> 

    <ToggleButton x:Name="Button2" 
        IsEnabled="{Binding IsConnected}"> 
     <ToggleButton.Style> 
      <Style TargetType="ToggleButton" BasedOn="{StaticResource DetailedSettingsButtonStyle}" > 
       <Setter Property="IsChecked" Value="False" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=Button1, Path=IsChecked}" Value="True"> 
         <Setter Property="IsChecked" Value="False" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ToggleButton.Style> 
    </ToggleButton> 

ボタン1がチェックされたときに結果がありますボタン2をクリックすると、ボタン1は期待どおりにチェックされなくなりますが、ボタン2は再度押すまでチェックされません。

だから、ボタン1と2を切り替えるために、私は、私は常に状態を通過する必要があり、私が作成しようとしています三つの状態を考慮し、換言すれば、ボタン2.

に二回クリックする必要があります他の2つの州の間を直接移動する方法はありません。

私は間違って何を考えていますか?

答えて

0

あなたはStoryboardsを使用してこれを行うことができるようになります。

<ToggleButton x:Name="Button1" IsEnabled="{Binding IsConnected}"> 
    <ToggleButton.Style> 
     <Style TargetType="ToggleButton" BasedOn="{StaticResource DetailedSettingsButtonStyle}"> 
      <Setter Property="IsChecked" Value="False"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsChecked, ElementName=Button2}" Value="True"> 
        <DataTrigger.EnterActions> 
         <BeginStoryboard> 
          <Storyboard> 
           <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsChecked"> 
            <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> 
           </BooleanAnimationUsingKeyFrames> 
          </Storyboard> 
         </BeginStoryboard> 
        </DataTrigger.EnterActions> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ToggleButton.Style> 
</ToggleButton> 

<ToggleButton x:Name="Button2" IsEnabled="{Binding IsConnected}"> 
    <ToggleButton.Style> 
     <Style TargetType="ToggleButton" BasedOn="{StaticResource DetailedSettingsButtonStyle}"> 
      <Setter Property="IsChecked" Value="False"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsChecked, ElementName=Button1}" Value="True"> 
        <DataTrigger.EnterActions> 
         <BeginStoryboard> 
          <Storyboard> 
           <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsChecked"> 
            <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> 
           </BooleanAnimationUsingKeyFrames> 
          </Storyboard> 
         </BeginStoryboard> 
        </DataTrigger.EnterActions> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ToggleButton.Style> 
</ToggleButton> 
+0

元のコードが機能しない理由は何ですか? XAMLでイベントがどのように発生するかをデバッグするためのツールがVSにありますか? C#にないMicrosoft WPFのやりとりの不思議な世界を発見してください。 – Bishoy

+0

@Bishoy:基本的には、トリガーの条件が真でなくなったときに、以前に行ったことを取り消そうとするためです。 – mm8

0

あなたは両方のために、他のケースのために(値= Falseを設定するにisChecked = true)をデータ・トリガーを追加することができます。

<DataTrigger Binding="{Binding ElementName=Button1, Path=IsChecked}" Value="False"> 
    <Setter Property="IsChecked" Value="True" /> 
</DataTrigger> 

しかし、トライステートの動作は失われます。コンバーターを作成してビュー・モデル・プロパティーにバインドする方がよいでしょう。

+0

その場合はラジオボタンを使用したい – Bishoy

関連する問題