wpf menuitem style.trigger

问题描述:

我试图实现一个可检查的菜单,其中一次只检查一个菜单项,即单选按钮的行为。我想用一个样式和数据触发器来实现它,以保持它在xaml中。目的是观察其他项目;每当其他任何事情都是真的时,它应该被设置为假。的确,每次只检查一个,但是需要两次按钮按下。我怎样才能使它只需按一下按钮?wpf menuitem style.trigger

<MenuItem Header="Header"> 
      <MenuItem x:Name="ChangesMenuItem" Header="Changes" IsCheckable="True" Command="{Binding ViewChangesCommand}"> 
       <MenuItem.Style> 
        <Style TargetType="MenuItem"> 
         <Style.Triggers>         
          <DataTrigger Binding="{Binding ElementName=SettingsMenuItem, Path=IsChecked}" Value="True"> 
           <Setter Property="IsChecked" Value="False" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding ElementName=SyncMenuItem, Path=IsChecked}" Value="True"> 
           <Setter Property="IsChecked" Value="False" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </MenuItem.Style> 
      </MenuItem> 
      <MenuItem x:Name="SettingsMenuItem" Header="Settings" IsCheckable="True" Command="{Binding ViewSettingsCommand}"> 
       <MenuItem.Style> 
        <Style TargetType="MenuItem"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding ElementName=ChangesMenuItem, Path=IsChecked}" Value="True"> 
           <Setter Property="IsChecked" Value="False" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding ElementName=SyncMenuItem, Path=IsChecked}" Value="True"> 
           <Setter Property="IsChecked" Value="False" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </MenuItem.Style> 
      </MenuItem> 
      <MenuItem x:Name="SyncMenuItem" Header="Sync" IsCheckable="True" Command="{Binding ViewSyncCommand}"> 
       <MenuItem.Style> 
        <Style TargetType="MenuItem"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding ElementName=ChangesMenuItem, Path=IsChecked}" Value="True"> 
           <Setter Property="IsChecked" Value="False" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding ElementName=SettingsMenuItem, Path=IsChecked}" Value="True"> 
           <Setter Property="IsChecked" Value="False" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </MenuItem.Style> 
      </MenuItem> 
     </MenuItem> 

我有一个标题根据选择而改变,所以我决定绑定到该属性。

<Menu> 
     <MenuItem Header="{Binding Header}"> 
      <MenuItem x:Name="ChangesMenuItem" Header="Changes" IsCheckable="True" Command="{Binding ViewChangesCommand}"> 
       <MenuItem.Style> 
        <Style TargetType="MenuItem"> 
         <Setter Property="IsChecked" Value="False"/> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Header}" Value="Changes"> 
           <Setter Property="IsChecked" Value="True"/> 
          </DataTrigger>                
         </Style.Triggers>        
        </Style> 
       </MenuItem.Style>     
      </MenuItem> 
      <MenuItem x:Name="SettingsMenuItem" Header="Settings" IsCheckable="True" Command="{Binding ViewSettingsCommand}"> 
       <MenuItem.Style> 
        <Style TargetType="MenuItem"> 
         <Setter Property="IsChecked" Value="False"/> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Header}" Value="Settings"> 
           <Setter Property="IsChecked" Value="True"/> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </MenuItem.Style> 
      </MenuItem> 
      <MenuItem x:Name="SyncMenuItem" Header="Sync" IsCheckable="True" Command="{Binding ViewSyncCommand}"> 
       <MenuItem.Style> 
        <Style TargetType="MenuItem"> 
         <Setter Property="IsChecked" Value="False"/> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Header}" Value="Sync"> 
           <Setter Property="IsChecked" Value="True"/> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </MenuItem.Style> 
      </MenuItem> 
     </MenuItem> 
    </Menu>