Я подключил пункт контекстного меню в элементе списка, чтобы при его нажатии изменилось его состояние. Мне нужно, чтобы меню оставалось открытым после выбора элемента, или чтобы программно открыть меню сразу после его закрытия.
Мое меню выглядит так:
Some Command 1
Some Command 2
Some Command 3
Inverted
И пользователь может нажать команду Inverted
, а затем нажать одну из других команд, чтобы заставить их работать в инвертированном режиме, и меню через привязку данных выглядит так:
Some Command 1
Some Command 2
Some Command 3
Inverted ✔
Не имея возможности выяснить, как сохранить меню открытым после нажатия, я попробовал менее идеальный подход к открытию меню, например:
private void onCommandInvert(object sender, RoutedEventArgs e)
{
CommandState.Instance.Inverted = !CommandState.Instance.Inverted;
// Open it again.
MenuItem menuItem = (MenuItem)sender;
ContextMenu menu = (ContextMenu)menuItem.Parent;
menu.IsOpen = true;
}
Но при этом выдается следующее исключение в операторе menu.IsOpen = true
:
A first chance exception of type 'System.InvalidOperationException' occurred in
System.Windows.dll
An unhandled exception of type 'System.InvalidOperationException' occurred in
System.Windows.dll
Additional information: Element is already the child of another element.
Я также попробовал следующее с событием Closed
, с тем же самым исключением:
private void onContextMenuClosed(object sender, RoutedEventArgs e)
{
ContextMenu menu = (ContextMenu)sender;
menu.IsOpen = true;
}
Есть идеи? Спасибо!