WPF UserControl замена и сохранение фокуса клавиатуры - PullRequest
2 голосов
/ 05 марта 2010

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

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

Другими словами, я нажимаю кнопку A и показываю UserControl A. Если я перемещаю фокус клавиатуры в текстовое поле в этом UserControl, затем нажимаю кнопку B, выполняю некоторую работу, затем снова нажимаю кнопку A, и я хотел бы, чтобы фокус то же текстовое поле, которое я в последний раз использовал в UserControl A.

Есть идеи, как мне этого добиться?

1 Ответ

3 голосов
/ 05 марта 2010

Объявить словарь с клавишей, являющейся одной из кнопок на левой стороне, и значением текущего фокусированного элемента управления.Когда кнопка нажата, возьмите текущий фокусированный элемент и установите его в словаре (ключом является ранее нажатая кнопка).Измените отображаемый UserControl и прочитайте словарь, ключом которого является только что нажатая кнопка.Если для этой записи есть элемент управления, установите фокус на него.

Используйте FocusManager.FocusedElement, чтобы узнать, какой элемент управления имеет фокус (на самом деле это IInputElement, который должен быть типом значения словаря) и FocusManager.SetFocusedElement, чтобы вернуть фокус (или вызвать Focus () для элемента управления).

...