Я имею ListBox с объектами и присвоил ContextMenu ему с тремя пунктами меню. Все хорошо работает за исключением того, что один из пунктов меню запускает долгую операцию. Я хотел бы закрыть ContextMenu от обработчика и возможно отобразить курсор в форме песочных часов или что-то.
Это может быть сделано? Или, я должен использовать Всплывающее окно вместо этого? Если так, как я использую Всплывающее окно вместо ContextMenu? Мое предположение, я должен был бы управлять им полностью - размещение и время жизни.
Спасибо!
Вы можете просто запустить длительную операцию в Dispatcher.BeginInvoke:
private void OnSomeContextMenuCommand(object sender, EventArgs e)
{
Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
{
// Put long-running operation here
}));
}
Если вы сделаете это, ContextMenu закроется до того, как начнется ваша длительная операция.
В общем, я предпочитаю это решение явному закрытию ContextMenu, потому что оно полностью отделяет пользовательский интерфейс от обработки команд.
Вы хотите:
myContextMenu.IsOpen = false;
Обязательно вызовите этот до выполнения вашей длительной операции. В зависимости от вашей операции вы можете захотеть сделать ее асинхронной, выполнив операцию в другом потоке - таким образом вы не остановите поток приложения.