2014-03-07 2 views
2

두 개의 ToggleButtons 동작을 라디오 버튼과 비슷한 방식으로 수행하려고합니다. 그러나 중요한 차이점은 중 하나도 선택하지 않은 것이 유효한 경우입니다. (까지만 한 번에 하나씩 확인할 수 있으며, 상호 배타적입니다.) DataTrigger가 바인딩 될 때 WPF ToggleButton이 선택되지 않음

<Window> 
    <Grid> 
     <ToolBarTray DockPanel.Dock="Top"> 
      <ToolBar> 
       <ToggleButton x:Name="ShowLineGridToggleButton"> 
        <ToggleButton.Style> 
         <Style TargetType="ToggleButton"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding IsChecked, ElementName=ShowDotGridToggleButton}" Value="True"> 
            <Setter Property="IsChecked" Value="False" /> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </ToggleButton.Style> 
        <Image Source="../Images/ShowLineGrid.png" /> 
       </ToggleButton> 
       <ToggleButton x:Name="ShowDotGridToggleButton"> 
        <ToggleButton.Style> 
         <Style TargetType="ToggleButton"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding IsChecked, ElementName=ShowLineGridToggleButton}" Value="True"> 
            <Setter Property="IsChecked" Value="False" /> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </ToggleButton.Style> 
        <Image Source="../Images/ShowDotGrid.png" /> 
       </ToggleButton> 
      </ToolBar> 
     </ToolBarTray> 
    <Grid> 
</Window> 

실제로 다른 선택을 취소합니다 하나 개의 버튼을 클릭 : 여기

거의 작동 일부 XAML입니다. 불행히도 어떤 일이 일어나고 있는지는 클릭 된 버튼이 확인되지 않는다는 것입니다. 마우스를 위로 움직이면 배경이 바뀌지 만 마우스가 멀리 떨어지면 버튼이 선택되지 않은 것으로 표시됩니다.

세터를 주석 처리하면 클릭 된 버튼을 확인할 수 있습니다. Setter가 클릭 한 버튼의 선택을 해제하는 것과 같습니다.

나는 XAML에서 이벤트 처리기를 통해 코드를 구현하는 것보다 처리 해야겠다. 이렇게하면 모든 것을 한 곳에서 정의 할 수 있습니다.

아이디어가 있으십니까?

TIA!

답변

0

ToggleButtonsRadioButtons으로 변경해보십시오. 그런 다음 ToggleButton 템플릿을 각각에 적용하여 문제를 해결할 수 있습니다.

이것은 컴파일해야합니다

<Window> 

    <Window.Resources> 
     <Style TargetType="{x:Type RadioButton}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <ToggleButton IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" 
          Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 

    <Grid> 
     <ToolBarTray DockPanel.Dock="Top"> 
      <ToolBar> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition /> 
         <ColumnDefinition /> 
        </Grid.ColumnDefinitions> 
        <RadioButton x:Name="ShowLineGridToggleButton"> 
         <Image Source="../Images/ShowLineGrid.png" /> 
        </RadioButton> 
        <RadioButton Grid.Column="1" x:Name="ShowDotGridToggleButton"> 
         <Image Source="../Images/ShowDotGrid.png" /> 
        </RadioButton> 
       </Grid> 
      </ToolBar> 
     </ToolBarTray> 
    </Grid> 
</Window> 

당신이 볼 수 있듯이, 당신은 자신의 열에서 라디오 버튼을 넣어하거나 그들이 클릭 이벤트에 혼란스러워.