MenuItem 中的 WPF 列表框。单击列表框时如何防止菜单关闭?
WPF ListBox in MenuItem. How to keep menu from closing when clicking in ListBox?
我正在尝试在 DataGrid 中创建 Excel-like sorting/filtering。我在 MenuItem 的 Header 内创建了一个带有 ListBox 的 ContextMenu。
当我单击复选框或复选框的文本时,它的行为符合预期。但是,如果我单击 checkbox/listbox 的白色 space 或列表框外的 header space,上下文菜单将关闭。
它还没有出现在屏幕截图中,但我会在列表框下方添加“确定”和“取消”按钮。单击其中之一是当我希望关闭 ContextMenu 时。
如果您需要 XAML,这里是:
<MenuItem x:Name="miListBox"
Focusable="False">
<MenuItem.Header>
<ListBox MaxHeight="150" Focusable="False">
</ListBox>
</MenuItem.Header>
</MenuItem>
ContextMenu
有一个 属性 叫做 StaysOpen
。只需将它设置为 true
以不允许它自动关闭,然后您需要手动使用 IsOpen
属性 到 open/close 它:
<ContextMenu StaysOpen="true">
<ContextMenu.Resources>
<!-- ... --->
</ContextMenu>
编辑:
从 MSDN 上看,StaysOpen
属性 应该如其名称所暗示的那样工作,但看起来它只是 没用 .因为它没有按预期工作。当单击其中一个 MenuItem 或单击 ContextMenu 外部时,IsOpen
总是自动设置为 false 。并且在关于 StaysOpen
的文档中,当 IsOpen
设置为 false 时,ContextMenu
仍然关闭。这里的问题是我们没有手动设置它,但它会以某种方式自动设置,因此 uselessness of StaysOpen
.
我们可以在每个 MenuItem 上设置 StaysOpenOnClick
:
<ContextMenu>
<ContextMenu.Resources>
<Style TargetType="MenuItem">
<Setter Property="StaysOpenOnClick" Value="True"/>
</Style>
</ContextMenu.Resources>
<!-- ... -->
</ContextMenu>
我正在尝试在 DataGrid 中创建 Excel-like sorting/filtering。我在 MenuItem 的 Header 内创建了一个带有 ListBox 的 ContextMenu。
当我单击复选框或复选框的文本时,它的行为符合预期。但是,如果我单击 checkbox/listbox 的白色 space 或列表框外的 header space,上下文菜单将关闭。
它还没有出现在屏幕截图中,但我会在列表框下方添加“确定”和“取消”按钮。单击其中之一是当我希望关闭 ContextMenu 时。
如果您需要 XAML,这里是:
<MenuItem x:Name="miListBox"
Focusable="False">
<MenuItem.Header>
<ListBox MaxHeight="150" Focusable="False">
</ListBox>
</MenuItem.Header>
</MenuItem>
ContextMenu
有一个 属性 叫做 StaysOpen
。只需将它设置为 true
以不允许它自动关闭,然后您需要手动使用 IsOpen
属性 到 open/close 它:
<ContextMenu StaysOpen="true">
<ContextMenu.Resources>
<!-- ... --->
</ContextMenu>
编辑:
从 MSDN 上看,StaysOpen
属性 应该如其名称所暗示的那样工作,但看起来它只是 没用 .因为它没有按预期工作。当单击其中一个 MenuItem 或单击 ContextMenu 外部时,IsOpen
总是自动设置为 false 。并且在关于 StaysOpen
的文档中,当 IsOpen
设置为 false 时,ContextMenu
仍然关闭。这里的问题是我们没有手动设置它,但它会以某种方式自动设置,因此 uselessness of StaysOpen
.
我们可以在每个 MenuItem 上设置 StaysOpenOnClick
:
<ContextMenu>
<ContextMenu.Resources>
<Style TargetType="MenuItem">
<Setter Property="StaysOpenOnClick" Value="True"/>
</Style>
</ContextMenu.Resources>
<!-- ... -->
</ContextMenu>