如何让菜单的子菜单项保持打开状态?

How can I keep a menu submenu item open?

我正在尝试创建一个稍微复杂的菜单项,允许用户创建新的 class。我 运行 遇到的问题是,当我单击菜单项关闭的数字上下(来自 xceed 工具包)时,即使 属性 StaysOpenOnClick 设置为 true .

用户不会喜欢那样。

要重现,请创建一个 WPF 项目并通过 NuGet 添加扩展 WPF 工具包,然后将以下代码拖放到您的主窗口中 class:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:WhyDoesMyMenuItemCloseWhenClicked"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
    mc:Ignorable="d"
    x:Class="WhyDoesMyMenuItemCloseWhenClicked.MainWindow"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="21"/>
            <RowDefinition />
        </Grid.RowDefinitions>
        <Menu FontWeight="Bold">
            <MenuItem Header="_File">
                <MenuItem StaysOpenOnClick="True">
                    <Grid Height="50" Width="50">
                        <xctk:IntegerUpDown/>
                    </Grid>
                </MenuItem>
            </MenuItem>
        </Menu>
    </Grid>
</Window> 

当我单击上下整数的文本字段时,菜单关闭。

为什么这种情况一直发生?我怎样才能让它发生?

我想出了解决办法。这是一种非常棘手的解决方法,但它做得很好:

变化是您在 MenuItem 中创建了一个 MenuItem。然后在子 MenuItemMenuItem.Header 属性 中定义控件,并将 MenuItemStaysOpenOnClick 属性 设置为 true。

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:WhyDoesMyMenuItemCloseWhenClicked"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
    mc:Ignorable="d"
    x:Class="WhyDoesMyMenuItemCloseWhenClicked.MainWindow"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="21"/>
            <RowDefinition />
        </Grid.RowDefinitions>
        <Menu FontWeight="Bold">
            <MenuItem Header="_File" StaysOpenOnClick="True">
                <MenuItem Header="_StaysOpenOnClick">
                    <MenuItem StaysOpenOnClick="True">
                        <MenuItem.Header>
                            <xctk:IntegerUpDown/>
                        </MenuItem.Header>
                    </MenuItem>
                </MenuItem>
            </MenuItem>
        </Menu>
    </Grid>
</Window>

你可以利用 StaysOpenOnClick 属性 来实现这个