我有一个包含项目的ListBox,并为其分配了一个ContextMenu,其中包含三个菜单项。除了其中一个菜单项启动冗长的操作外,一切正常。我想从处理程序关闭ContextMenu,并可能显示一个沙漏光标或其他东西。
能做到吗?或者,我应该使用Popup吗?如果是这样,我如何使用Popup代替ContextMenu?我的假设是我必须完全管理它 - 安置和生命。
谢谢!
答案 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与命令处理分开。