WPF usercontrol не позволяет потерять фокус при отдельном управлении

Это немного сложно объяснить.

У меня есть пользовательский элемент управления с некоторыми текстовыми полями. У меня также есть меню чуть выше этого пользовательского элемента управления в том же окне. Всякий раз, когда я перехожу на вкладку, LostFocus правильно срабатывает в текстовом поле, и это то, что я хочу. Как ни странно, если я нажимаю кнопку «Меню» в верхней части окна, событие LostFocus не запускается в текстовом поле. Есть ли элегантный способ убедиться, что мое меню правильно позволяет LostFocus запускать любые элементы управления, которые в последний раз были в фокусе?

Я также хочу избежать необходимости обновлять BindingExpressions, иначе я, вероятно, сделал бы это для N текстовых полей, что нежелательно.

Я не могу себе представить, чтобы это было слишком сложно ... Я просто не понимаю, как это не работает: в большинстве других ситуаций всегда срабатывает LostFocus.

Любые идеи? Спасибо.


person Mani5556    schedule 13.08.2011    source источник
comment
Меню не фокусируется. По дизайну. Почему ты этого хочешь?   -  person Henk Holterman    schedule 13.08.2011
comment
Сосредоточьтесь, чтобы предыдущий элемент управления мог вести себя соответствующим образом.   -  person Mani5556    schedule 14.08.2011
comment
Если бы был способ сделать что-то OnClick для команды меню, например, определить, что находится в фокусе, а затем справиться с этим ... это уже другая проблема ...   -  person Mani5556    schedule 15.08.2011
comment
Если TextBox имеет фокус и вы щелкаете другой элемент, например меню, которое на самом деле не захватывает мышь, TextBox все равно сохраняет фокус, следовательно, LostFocus не срабатывает. Возможно, вам придется отложить переоценку ваших выражений до тех пор, пока это действительно не понадобится.   -  person Klaus Nji    schedule 15.08.2011


Ответы (1)


Меню тоже WPF или Winforms / UnManaged? Если одно из двух, событие потери фокуса не срабатывает. Это может нанести ущерб элементам управления WPF, если из меню выполняется сохранение или другая функция данных. Чтобы противостоять этому, мне пришлось реализовать несколько способов борьбы с этим. Самый простой способ - реализовать событие выхода мыши на самом пользовательском элементе управления и выполнить любые действия, которые вам требуются, вручную в коде.

person tsells    schedule 23.08.2011