2009-08-12 41 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