Как узнать, на чем фокусируется мое приложение WPF? - PullRequest
7 голосов
/ 30 марта 2012

У меня есть экран поиска в моем приложении WPF.Экран реализован как пользовательский элемент управления в элементе TabIont элемента TabControl.Когда пользователь переключается на вкладку «Поиск», я хочу, чтобы фокус переместился в одно конкретное поле.

Поэтому я добавил обработчик события Loaded в тег UserControl в Xaml, и я вызвал метод Focus элемента управления Iхочу иметь начальный фокус в обработчике события Loaded.Это прекрасно работало, пока я не обновил управляющую библиотеку Telerik, которую я использую сегодня.Теперь, когда я переключаюсь на вкладку «Поиск», фокус НЕ находится в поле, которое я хочу получить, но я не могу сказать, какой элемент управления имеет фокус.

Поле, которое я хочу уже иметь фокуспо другим причинам имеет обработчики событий GotFocus & LostFocus.Я вспомнил, что в Win Forms аргументы обработчика событий LostFocus сообщают вам, какой элемент управления получит фокус.Поэтому я установил точку останова в своем обработчике LostFocus и обнаружил, что аргументы обработчика событий LostFocus в WPF не включают эту информацию.

Как определить, куда направлен фокус, не помещая обработчики GotFocus на каждыйконтроль в моем UserControl?

Тони

Ответы [ 2 ]

7 голосов
/ 30 марта 2012

Вы можете попробовать поставить точку останова на присоединенное событие LostKeyboardFocus вместо события LostFocus.Он использует класс KeyboardFocusChangedEventArgs, который имеет свойства, которые показывают, какой элемент был в фокусе и куда направлен фокус.

private void textBox1_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    textBox1.Text = ((FrameworkElement)e.NewFocus).Name ; 
}
...