2011-06-13 35 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