#c# #wpf #contextmenu
#c# #wpf #контекстное меню
Вопрос:
должен признаться, я не мог найти лучшего названия.
У меня есть элемент управления, который содержит в нижней части текстовое поле. У этого элемента управления есть контекстное меню, и, конечно, текстовое поле имеет обычное контекстное меню редактирования текста. Когда я щелкаю правой кнопкой мыши по внешнему элементу управления, открывается его контекстное меню, чего я и хочу. Если я щелкаю правой кнопкой мыши текстовое поле, оно получает фокус и открывает контекстное меню редактирования текста. Но когда я щелкаю правой кнопкой мыши по текстовому полю, и оно не имеет фокуса клавиатуры, я не хочу устанавливать фокус и не хочу открывать контекстное меню текстового поля, вместо этого оно должно открывать контекстное меню внешнего элемента управления.
Единственное, что мне удалось, это игнорировать контекстное меню текстового поля при щелчке правой кнопкой мыши по текстовому полю. (для тестирования я создал элемент управления, полученный из текстового поля)
protected override void OnMouseDown(MouseButtonEventArgs aArgs)
{
if(aArgs.ChangedButton == MouseButton.Right)
{
return;
}
base.OnMouseDown(aArgs);
}
Даже при этом текстовые OnContextMenuOpening
поля запускаются, но независимо от того, обрабатывается ли значение true или false, контекстное меню вообще не открывается.
Я надеюсь, что у кого-то есть идея.
Комментарии:
1. Произойдет ли то же самое, если вы используете
PreviewMouseDown
вместоMouseDown
?2. @Rachel хм, не пробовал, но я бы сказал, нет, потому что я не обрабатываю событие мыши. Я надеялся, что возврат из этой обработки мыши передаст событие следующему элементу управления под ним. Но я попробую.
Ответ №1:
Решение, которое работает для меня, настолько простое, что я удивляюсь, почему я не подумал об этом раньше. Когда элемент управления загружен или элемент теряет фокус, я просто сохраняю элементы ContextMenu
во временной переменной и обнуляю фактическое ContextMenu
значение, если элемент получает фокус, я восстанавливаю его из временно сохраненного контекстного меню. Это работает на удивление хорошо и может быть красиво обернуто в прикрепленное поведение.