Откройте следующее ContextMenu в VisualTree, когда текущий элемент не имеет фокуса - PullRequest
1 голос
/ 14 октября 2011

Я должен признаться, что не смог найти лучшего заголовка.

У меня есть элемент управления, который содержит в нижней части TextBox.Этот элемент управления имеет ContextMenu и, конечно, TextBox имеет свое обычное текстовое редактирование ContextMenu.Когда я щелкаю правой кнопкой мыши по внешнему элементу управления, открывается его ContextMenu, чего я и хочу.Если я щелкну правой кнопкой мыши по текстовому полю, он получит фокус и откроет контекстное меню редактирования текста.Но когда я щелкаю правой кнопкой мыши по текстовому полю, и у него нет фокуса клавиатуры, я не хочу устанавливать фокус и не хочу открывать контекстное меню текстового поля, вместо этого оно должно открывать контекстное меню внешнего управления.

Единственное, что мне удалось, - это игнорировать контекстное меню текстового поля при щелчке правой кнопкой мыши по текстовому полю.(для тестирования я создал элемент управления, полученный из TextBox)

protected override void OnMouseDown(MouseButtonEventArgs aArgs)
    {
        if(aArgs.ChangedButton == MouseButton.Right)
        {
              return;
        }

        base.OnMouseDown(aArgs);
    }

Даже при этом текстовые поля OnContextMenuOpening запускаются, но независимо от того, обрабатывается ли значение true или false, контекстное меню вообще не открывается.*

Надеюсь, у кого-то есть идея.

1 Ответ

0 голосов
/ 26 октября 2011

Решение, которое работает для меня, настолько просто, я удивляюсь, почему я не думал об этом раньше. Когда элемент управления загружен или элемент теряет фокус, я просто сохраняю элементы ContextMenu во временной переменной и обнуляю фактическое ContextMenu, если элемент получает фокус, я восстанавливаю его из временно сохраненного ContextMenu. Это работает на удивление хорошо, и может быть красиво обернуто в прикрепленное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...