MenuItem中的WPF ListBox。单击ListBox时如何保持菜单关闭?

时间:2015-10-20 20:50:22

标签: wpf listbox contextmenu menuitem

我正在尝试在DataGrid中创建类似Excel的排序/过滤。我在MenuItem的Header中创建了一个带有ListBox的ContextMenu。

The ContextMenu

当我单击复选框或复选框的文本时,它的行为与预期一致。但是,如果我单击复选框/列表框的空白区域或列表框外的标题空间,则ContextMenu将关闭。

它不在截图中,但我会添加OK&取消列表框下方的按钮。单击其中一个是我希望关闭ContextMenu。

如果你需要XAML,这里是:

    <MenuItem x:Name="miListBox"
              Focusable="False">
        <MenuItem.Header>
                <ListBox MaxHeight="150" Focusable="False">

                </ListBox>
        </MenuItem.Header>
    </MenuItem>

1 个答案:

答案 0 :(得分:2)

ContextMenu有一个名为StaysOpen的属性。只需将其设置为true即可自动关闭,然后您需要使用IsOpen属性手动打开/关闭它:

<ContextMenu StaysOpen="true">
    <ContextMenu.Resources>

    <!-- ... --->
</ContextMenu>

修改

从MSDN,StaysOpen属性应该如名称所示,但看起来只是 无用 。因为它预期不起作用。当点击其中一个MenuItem或我们在ContextMenu外部点击时,IsOpen总是设置为false 自动 。与关于StaysOpen的文档一样,ContextMenuIsOpen设置为false时仍然关闭。这里的问题是我们不是手动设置,而是自动设置,因此StaysOpen 无用

我们可以在每个MenuItem上设置StaysOpenOnClick

<ContextMenu>
    <ContextMenu.Resources>
         <Style TargetType="MenuItem">
              <Setter Property="StaysOpenOnClick" Value="True"/>
         </Style>
    </ContextMenu.Resources>
    <!-- ... -->
</ContextMenu>