我正在尝试在DataGrid中创建类似Excel的排序/过滤。我在MenuItem的Header中创建了一个带有ListBox的ContextMenu。
当我单击复选框或复选框的文本时,它的行为与预期一致。但是,如果我单击复选框/列表框的空白区域或列表框外的标题空间,则ContextMenu将关闭。
它不在截图中,但我会添加OK&取消列表框下方的按钮。单击其中一个是我希望关闭ContextMenu。
如果你需要XAML,这里是:
<MenuItem x:Name="miListBox"
Focusable="False">
<MenuItem.Header>
<ListBox MaxHeight="150" Focusable="False">
</ListBox>
</MenuItem.Header>
</MenuItem>
答案 0 :(得分:2)
ContextMenu
有一个名为StaysOpen
的属性。只需将其设置为true
即可自动关闭,然后您需要使用IsOpen
属性手动打开/关闭它:
<ContextMenu StaysOpen="true">
<ContextMenu.Resources>
<!-- ... --->
</ContextMenu>
修改强>:
从MSDN,StaysOpen
属性应该如名称所示,但看起来只是 无用 。因为它预期不起作用。当点击其中一个MenuItem或我们在ContextMenu外部点击时,IsOpen
总是设置为false 自动 。与关于StaysOpen
的文档一样,ContextMenu
在IsOpen
设置为false时仍然关闭。这里的问题是我们不是手动设置,而是自动设置,因此StaysOpen
的 无用 。
我们可以在每个MenuItem上设置StaysOpenOnClick
:
<ContextMenu>
<ContextMenu.Resources>
<Style TargetType="MenuItem">
<Setter Property="StaysOpenOnClick" Value="True"/>
</Style>
</ContextMenu.Resources>
<!-- ... -->
</ContextMenu>