考虑以下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事件,但这只会覆盖单个上下文菜单,并且我想覆盖表单中的所有(现有)上下文菜单。

最佳答案

不太确定为什么要使用这种方法。但是,您可以轻松检查是否会出现上下文菜单。像这样:

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

关于c# - 即使控件未定义ContextMenu,也会引发ContextMenuOpening事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5856660/

10-12 22:35