Как узнать, активен ли UserControl, кроме использования IsFocused

Я работаю над проектом WPF и пытаюсь запускать событие каждый раз, когда некоторые пользовательские элементы управления становятся активными или неактивными.

Внутри этих пользовательских элементов управления есть много других элементов управления.

Я пытался добиться этого с помощью событий userControl GotFocus и LostFocus, но эти события не работают так, как мне нужно, поскольку userControl теряет фокус, когда я работаю с элементами управления внутри него.

Итак, мой вопрос: Есть ли способ сохранить userControl как Active, пока пользователь работает с элементами управления внутри него, и, когда пользователь переходит к другому userControl, этот первый получает Inactive???

Заранее спасибо.


person Dante    schedule 28.06.2012    source источник
comment
Пробовали ли вы использовать UIElement.IsKeyboardFocusWithinChanged Event?   -  person LPL    schedule 28.06.2012
comment
@LPL, я только что попробовал, но когда отображается пользовательский элемент управления, событие возникает бесконечно   -  person Dante    schedule 28.06.2012
comment
@Dante Вы используете точку останова? Точка останова приведет к тому, что UserControl потеряет фокус, затем Continuing снова заставит его получить фокус, что вызовет бесконечный цикл.   -  person Rachel    schedule 28.06.2012
comment
@Rachel Нет, я не использую точки останова, однако событие вызывается бесконечно   -  person Dante    schedule 28.06.2012


Ответы (2)


Я смог решить свою проблему благодаря комментариям @LPL и @Rachel.

Мне пришлось использовать событие UIElement.IsKeyboardFocusWithinChanged, и оно сработало отлично.

Сначала у меня была проблема, заключавшаяся в том, что метод обратного вызова вызывался бесконечно, но реальная проблема заключалась в том, что я показывал MessageBox каждый раз, когда возникало событие IsKeyboardFocusWithinChanged, поэтому это приводило к изменению свойства IsKeyboardFocusWithin и создавало бесконечный цикл. . Но благодаря совету Рэйчел я смог понять, как ее решить.

person Dante    schedule 29.06.2012

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

person yo chauhan    schedule 28.06.2012