【问题标题】:Have Context Menu close on mouseclick outside C#在 C# 外部单击鼠标时关闭上下文菜单
【发布时间】:2011-11-17 19:53:44
【问题描述】:

我在鼠标右键单击事件上有一个监听器,该事件触发 CreateContextMenu()

函数如下所示:

protected virtual ContextMenu CreateContextMenu()
    {
        ContextMenu contextMenu = new ContextMenu();

        MenuItem ClickHereMenuItem = new MenuItem();
        ClickHereMenuItem.Header = "Click Here";
        ClickHereMenuItem.Tag = contextMenu;
        ClickHereMenuItem.Click += ClickHere_Click;

        contextMenu.Items.Add(ClickHereMenuItem);

        contextMenu.Items.Add(new Separator());

        //Cancel Menu Item
        MenuItem cancelMenuItem = new MenuItem();
        cancelMenuItem.Header = "Cancel";
        cancelMenuItem.Tag = contextMenu;
        cancelMenuItem.Click += cancelMenuItem_Click;

        contextMenu.Items.Add(cancelMenuItem);
        return contextMenu; 
    }

一切都按预期进行,但关闭上下文菜单的唯一方法是选择“取消”菜单项(它只设置contextMenu.IsOpen = false)。如果用户在控件之外单击,我还希望菜单关闭。我怎样才能做到这一点?

【问题讨论】:

  • 你使用什么 GUI? Windows 窗体?
  • 我无法重现您的问题:使用您的代码,我的上下文菜单可以正常关闭。所以问题一定出在你的 PreviewMouse(Left)ButtonDown 或其他地方。
  • @mhn 我正在使用 WPF GUI
  • 那么在System.Windows.Control.ContextMenu 之外单击以关闭它是默认功能吗?为什么这不起作用呢?除了 OnRightMouseclick 之外,我没有重载任何东西..
  • 重载 OnRightMouseClick ???您的意思是向 OnRightMouseClick 添加事件处理程序,不是吗? (你必须有一些很好的理由来重载,而不是仅仅为目前看起来很简单的情况添加事件处理程序。)

标签: c# wpf contextmenu


【解决方案1】:

尝试使用 dispose 方法关闭它

.Dispose()

【讨论】:

    【解决方案2】:

    创建一个高度和宽度占据您的应用程序窗口大小的画布布局,将其可见性设置为隐藏,然后将上下文菜单作为子项添加到画布中。现在您可以处理画布的 MouseLeftButtonDown 事件并在其中设置 contextMenu.IsOpen = false 。现在这个画布占据了你的应用程序的整个工作区域,所以你可以在右键单击的地方打开上下文菜单,而在用户左键单击的地方可以关闭上下文菜单。

    这是弹出窗口、上下文菜单等在 Windows 和 Web 应用程序中的工作方式。

    代码看起来与此类似,

    Canvas canvas = new Canvas();
    canvas.Height = Application.Height; //replace with ur app height
    canvas.Width = Application.Width; //replace with ur app width
    canvas.Child(ContextMenu); 
    canvas.MouseLeftButtonDown += (s,e) => { contextMenu.IsOpen = false};
    

    这不是实际代码,请作为参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 2023-02-23
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多