2011-06-13 33 views
4

的预防儿童的继承根据此代码:父母的文本菜单

<StackPanel> 
    <StackPanel.ContextMenu> 
    <ContextMenu> 
     <MenuItem Header="menuitem1"/> 
     <MenuItem Header="menuitem2"/> 
    </ContextMenu> 
    </StackPanel.ContextMenu> 

    <Button Width="100" Height="100"/> 
    <Button Width="100" Height="100"/> 
</StackPanel> 

如果右键单击按钮,然后文本菜单就会出现,孩子会继承其父的文本菜单。
我的问题是如何防止此功能?

编辑:如果可能的话,我需要一个xaml方法。

+1

时,应在文本菜单打开? – thumbmunkeys 2011-06-13 17:54:36

+0

右键点击堆栈面板 – 2011-06-13 17:56:27

回答

4

我发现这个解决方案

<StackPanel> 
    <StackPanel.ContextMenu> 
    <ContextMenu> 
     <MenuItem Header="menuitem1"/> 
     <MenuItem Header="menuitem2"/> 
    </ContextMenu> 
    </StackPanel.ContextMenu> 

    <Button Width="100" Height="100"> 
     <Button.ContextMenu> 
      <ContextMenu Visibility="Hidden"/> 
     </Button.ContextMenu> 
    </Button> 
    <Button Width="100" Height="100"/> 
</StackPanel> 
2

在有问题的按钮上,您需要停止传播至包含StackPanel的右键单击鼠标事件。您可以通过处理MouseDown这样做:

void button_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    if (e.RightButton == MouseButtonState.Pressed) 
    { 
     e.Handled = true; 
    } 
} 
+0

我不想处理鼠标事件有没有更好的方法? – 2011-06-18 12:01:15

+0

这甚至不适合我... – ThisHandleNotInUse 2015-03-08 08:02:07