Как я могу вынудить ContextMenu закрыться (проект WPF)?

Я имею ListBox с объектами и присвоил ContextMenu ему с тремя пунктами меню. Все хорошо работает за исключением того, что один из пунктов меню запускает долгую операцию. Я хотел бы закрыть ContextMenu от обработчика и возможно отобразить курсор в форме песочных часов или что-то.

Это может быть сделано? Или, я должен использовать Всплывающее окно вместо этого? Если так, как я использую Всплывающее окно вместо ContextMenu? Мое предположение, я должен был бы управлять им полностью - размещение и время жизни.

Спасибо!

6
задан GTAE86 12 May 2010 в 16:05
поделиться

2 ответа

Вы можете просто запустить длительную операцию в Dispatcher.BeginInvoke:

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

Если вы сделаете это, ContextMenu закроется до того, как начнется ваша длительная операция.

В общем, я предпочитаю это решение явному закрытию ContextMenu, потому что оно полностью отделяет пользовательский интерфейс от обработки команд.

7
ответ дан 8 December 2019 в 04:51
поделиться

Вы хотите:

myContextMenu.IsOpen = false;

Обязательно вызовите этот до выполнения вашей длительной операции. В зависимости от вашей операции вы можете захотеть сделать ее асинхронной, выполнив операцию в другом потоке - таким образом вы не остановите поток приложения.

17
ответ дан 8 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: