即使控件没有定义ContextMenu,也会引发ContextMenuOpening事件

时间:2011-05-02 11:37:43

标签: c# .net wpf

考虑以下XAML:

<Window x:Class="ContextMenuEvent.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" ContextMenuOpening="Window_ContextMenuOpening">
    <Grid>
        <Button>Ok</Button>
    </Grid>
</Window>

右键单击该按钮会导致ContextMenuOpening触发,即使实际上没有显示上下文菜单。

为什么会这样?只有当上下文菜单真正打开时,我才能做到均匀?

我知道我可以使用ContextMenu.Opened事件,但这只会涵盖单个上下文菜单,我想要覆盖表单中的所有(现有)上下文菜单。

2 个答案:

答案 0 :(得分:3)

不太清楚为什么要使用这种方法。但是,您可以轻松检查是否显示上下文菜单。像这样:

    private void Window_ContextMenuOpening(object sender, ContextMenuEventArgs e) {
        var menu = (e.Source as FrameworkElement).ContextMenu;
        if (menu != null) {
            // etc..
        }
    }

答案 1 :(得分:0)

您将使用ContextMenuEventArgs参数的source元素,并将其强制转换为System.Windows.Controls.Control(或者是覆盖所有点击的通用内容)。然后,您可以检查ContextMenu属性。