2017-11-29 33 views
-1

서로를 재설정하려면 두 개의 토글 버튼이 필요합니다. 라디오 버튼과 비슷하지만 tri-state가 있습니다. 즉상호 토글 버튼 - 두 개의 토글 버튼을 사용하여 트리거를 사용하여 트라이 상태를 나타냅니다.

  • 버튼 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는 다시 누를 때까지 버튼 2가 선택 취소 된 상태로 유지됩니다.

그래서 버튼 1과 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

원본 코드가 작동하지 않는 이유는 무엇입니까? VS에 XAML에서 이벤트가 발생하는 방식을 디버깅 할 수있는 도구가 있습니까? C#에없는 Microsoft WPF 상호 작용의 신비한 소름 끼치는 세계를 발견하십시오. – Bishoy

+0

@Bishoy : 기본적으로 트리거의 조건이 참으로 중지되면 이전에 수행 한 작업을 실행 취소하려고 시도하기 때문에 기본적으로 – mm8

0

당신은뿐만 아니라 다른 경우에 대한 데이터 트리거를 추가 할 수 있습니다 (거짓 값 = 설정의 IsChecked = 참) 모두.

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

하지만 트라이 상태 동작이 중단됩니다. 변환기를 만들어보기 모델 속성에 바인딩하는 것이 좋습니다.

+0

그 경우 라디오 버튼을 사용하고 싶습니다. – Bishoy