如何强制关闭ContextMenu(WPF项目)?

GTA*_*E86 6 wpf xaml contextmenu popup

我有一个带有项目的ListBox,并为其分配了一个ContextMenu,其中包含三个菜单项.除了其中一个菜单项启动冗长的操作外,一切正常.我想从处理程序关闭ContextMenu,并可能显示一个沙漏光标或其他东西.

可以这样做吗?或者,我应该使用Popup吗?如果是这样,我如何使用Popup代替ContextMenu?我的假设是我必须完全管理它 - 安置和生命.

谢谢!

Ali*_*vin 17

你想要的是:

myContextMenu.IsOpen = false;
Run Code Online (Sandbox Code Playgroud)

长时间操作之前,请务必调用此方法.根据您的操作,您可能需要考虑通过在另一个线程上执行操作使其异步 - 这样,您就不会停止应用程序线程.

  • 对于所询问的情况,Ray Burns 可能有更好的答案,但有时您只想出于不同的原因强制关闭上下文菜单,在这种情况下,这是最佳答案:) (2认同)

Ray*_*rns 7

您可以在Dispatcher.BeginInvoke下运行长时间操作:

private void OnSomeContextMenuCommand(object sender, EventArgs e)
{
  Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
  {
    // Put long-running operation here
  }));
}
Run Code Online (Sandbox Code Playgroud)

如果执行此操作,ContextMenu将在长时间运行操作开始之前关闭.

一般来说,我更喜欢这个解决方案来显式关闭ContextMenu,因为它完全将UI与命令处理分开.