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

时间:2010-05-12 16:05:52

标签: wpf xaml popup contextmenu

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

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

谢谢!

2 个答案:

答案 0 :(得分:15)

你想要的是:

myContextMenu.IsOpen = false;

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

答案 1 :(得分:7)

您只需在Dispatcher.BeginInvoke:

下运行长时间操作即可
private void OnSomeContextMenuCommand(object sender, EventArgs e)
{
  Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
  {
    // Put long-running operation here
  }));
}

如果这样做,ContextMenu将在长时间运行的操作开始之前关闭。

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