2009-08-12 44 views
1

我有一个场景,其中有一个GroupBox其中有一点内容。我想添加一个ContextMenuGroupBox,并在用户右键单击框中的任何位置时显示该菜单。WPF GroupBox ContextMenu不会显示,除非边框/标题点击

我遇到的问题是仅当点击边框或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

回答

3

组框本质上是一个带有标题标签的空白边框。如果组框中没有内容,则您的点击实际上会落在拥有的Window上,这就解释了“窗口菜单”即将出现的原因。如果你把一些内容放到组框它完全填满它,你会看到组框中上下文菜单上来随时:

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

谢谢查理。你说的是有道理的。有趣的是,在我的实际代码中(不是上面的模糊例子),我确实有内容,但是这些内容并非如上所示的简单标签。这些东西是否只与某些类型的内容配合使用?我有一个DockPanel填充整个组框,但这似乎没有帮助。也许我会在那里抛出一个边界,看看结果如何。 感谢您的建议。 – 2009-08-12 00:51:25

+1

再次嗨。因此,似乎只有某些类型的内容实际上使此功能起作用。像dockpanels和边界的东西根本就不工作。因此,我按照您的建议将整个内容包装在标签中,并解决了问题。我不喜欢它,但它的作品:)非常感谢。 – 2009-08-12 00:55:23

+0

包装标签中的所有内容并将'Horizo​​ntalAlignment =“Stretch”VerticalAlignment =“Stretch”'分配给'容器'标签对我来说是有效的。谢谢! – corentinaltepe 2017-04-12 08:51:15

2

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

+0

这帮了我。我有我的groupbox完整的文本块被呈现为ItemsControl的内容,但它们之间有空格,并且在这些空格中上下文菜单不显示。显示背景设置为透明。非常感谢解释:) – 2015-03-31 14:16:14