除非单击边框/标题,否则WPF GroupBox ContextMenu不会显示

时间:2009-08-12 00:04:09

标签: wpf xaml contextmenu groupbox

我有一个场景,我有一个GroupBox,里面有一些内容。我希望向ContextMenu添加GroupBox,并在用户右键单击框中的任意位置时显示该菜单。

我遇到的问题是只有在单击GroupBox的边框或标题时才会显示上下文菜单。如果你点击框内的某个地方,那么父母的ContextMenu就是显示的内容。

以下是一些演示此问题的XAML:

<Window x:Class="Dummy.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Window.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Window menu" />
        </ContextMenu>
    </Window.ContextMenu>
    <GroupBox Header="GroupBox">
        <GroupBox.ContextMenu>
            <ContextMenu>
                <MenuItem Header="GroupBox menu" />
            </ContextMenu>
        </GroupBox.ContextMenu>
    </GroupBox>
</Window>

因此,当您在GroupBox内单击时,您总会看到“窗口菜单”,但我想要“组菜单”。

有谁知道为什么会这样,我可能会如何解决它?

非常感谢。

OJ

2 个答案:

答案 0 :(得分:3)

组框基本上是带有标题标签的空边框。如果组框中没有内容,您的点击实际上会落在拥有Window上,这就解释了“窗口菜单”即将出现的原因。如果您将一些内容放入完全填充它的组框中,您将看到组框上下文菜单始终显示:

<GroupBox Header="GroupBox">
   <GroupBox.ContextMenu>
        <ContextMenu>
            <MenuItem Header="GroupBox menu"/>
        </ContextMenu>
    </GroupBox.ContextMenu>
    <Label HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
</GroupBox>

答案 1 :(得分:2)

实际问题是许多控件没有背景。我想你会发现,如果你为你的控件添加一个背景,你的上下文菜单就可以了。如果您不希望它显示

,您可以将背景设置为透明