选择单选按钮组项时,WPF 菜单不会关闭



我创建了一个菜单项资源样式,该样式有助于显示一组相互排斥的可选单选按钮项。选择其中一个单选按钮项时,菜单将不会关闭。我尝试使用StaysOpenOnClick,但这似乎不起作用。当选择其中一个单选按钮菜单项时,如何关闭菜单?

XAML:

<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="200" Width="200">
<Grid>
<Menu>
<MenuItem Header="Menu" StaysOpenOnClick="False" >
<MenuItem.Resources>
<Style x:Key="GroupStyle1" TargetType="{x:Type RadioButton}">
<Setter Property="GroupName" Value="OptionGroup1"/>
</Style>
</MenuItem.Resources>
<MenuItem StaysOpenOnClick="False">
<MenuItem.Template>
<ControlTemplate>
<RadioButton
Content="Radio1" 
Style="{StaticResource GroupStyle1}"/>
</ControlTemplate>
</MenuItem.Template>
</MenuItem>
<MenuItem StaysOpenOnClick="False">
<MenuItem.Template>
<ControlTemplate>
<RadioButton
Content="Radio2" 
Style="{StaticResource GroupStyle1}"/>
</ControlTemplate>
</MenuItem.Template>
</MenuItem>
<MenuItem StaysOpenOnClick="False">
<MenuItem.Template>
<ControlTemplate>
<RadioButton
Content="Radio3" 
Style="{StaticResource GroupStyle1}"/>
</ControlTemplate>
</MenuItem.Template>
</MenuItem>
</MenuItem>
</Menu>
</Grid>

我通常尽量不使用 WPF 背后的代码,但对于这样的事情,我认为这可能是合理的。我敢肯定,如果你考虑得足够长,你可以写一大堆可以做到这一点的 xaml,但这里有一个快速且有点肮脏的方法:

  1. 命名菜单项
  2. 向样式添加一个事件处理程序,并使用它来关闭代码隐藏中的菜单。(请参阅样式内部的EventSetter(

哈姆勒

<Grid>
<Menu>
<MenuItem x:Name="menuItem" Header="Menu">
<MenuItem.Resources>
<Style x:Key="GroupStyle1" TargetType="{x:Type RadioButton}">
<Setter Property="GroupName" Value="OptionGroup1"/>
<EventSetter Event="Checked" Handler="RadioButton_Checked"/> <!--Add this-->
</Style>
</MenuItem.Resources>
...

代码隐藏

private void RadioButton_Checked(object sender, RoutedEventArgs e)
{
menuItem.IsSubmenuOpen = false;
}

最新更新