2017-06-12 56 views
0

我試圖實現一個可檢查的菜單,其中一次只檢查一個菜單項,即單選按鈕的行爲。我想用一個樣式和數據觸發器來實現它,以保持它在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> 

回答

0

我有一個標題根據選擇而改變,所以我決定綁定到該屬性。

<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>