防止父代子女继承';的上下文菜单

本文关键字:上下文 菜单 继承 | 更新日期: 2023-09-27 17:59:07

根据此代码:

<StackPanel>
   <StackPanel.ContextMenu>
     <ContextMenu>
        <MenuItem Header="menuitem1"/>
        <MenuItem Header="menuitem2"/>
     </ContextMenu>
   </StackPanel.ContextMenu>
   <Button Width="100" Height="100"/>
   <Button Width="100" Height="100"/>
</StackPanel>

如果右键单击按钮,则会出现ContextMenu,子级将继承其父级的ContextMenu
我的问题是如何阻止此功能?

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

防止父代子女继承';的上下文菜单

我找到了这个解决方案

<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>

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

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