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

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

最佳答案

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

    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/

相关文章:

c# - 在 XAML 中实现全局命名空间

wpf - WPF中的PropertyMetaData、UIPropertyMetadata、FrameworkMetaData有什么区别

c# - 如何从用户的机器上获取有用的 WPF .NET 错误信息?

C# 获取 SQL 日志

c# - 字节流中的双值传输

c# - int 最大值 = ~0;这是什么意思?

c# - 为什么 FileSystemInfo 不声明 GetAccessControl 方法?

c# - 为什么新的.Net 4.0 EF应用程序会随机锁定?

c# - 实现迭代器时,返回 IEnumerator 或 IEnumerable 有什么区别?

c# - Caliburn Micro,如何首先使用 ViewModel 使用 ContentControl(或显示 'sub' ViewModel)