代码之家  ›  专栏  ›  技术社区  ›  OJ.

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

  •  1
  • OJ.  · 技术社区  · 16 年前

    我有一个场景 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>
    

    所以当你点击里面 分组框 你总是会看到“窗口菜单”出现,但我要的是“组菜单”。

    有人知道为什么会发生这种情况,以及我如何解决它吗?

    多谢。

    OJ

    2 回复  |  直到 12 年前
        1
  •  3
  •   Charlie    16 年前

    组框本质上是一个带有标题标签的空边框。在组框中没有内容的情况下,您的单击实际上是登录到所属的 Window 这就解释了为什么会出现“窗口菜单”。如果您将一些内容放入组框中,而组框完全填满了内容,您将看到组框上下文菜单始终出现:

    <GroupBox Header="GroupBox">
       <GroupBox.ContextMenu>
            <ContextMenu>
                <MenuItem Header="GroupBox menu"/>
            </ContextMenu>
        </GroupBox.ContextMenu>
        <Label HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
    </GroupBox>
    
        2
  •  2
  •   Rick Putnam    12 年前

    实际问题是许多控件没有背景。我想你会发现如果你在控件中添加一个背景,你的上下文菜单就会工作。如果不想显示,可以将背景设置为透明

    推荐文章