Управление фокусом от ViewModel - PullRequest
2 голосов
/ 02 ноября 2010

Почему 1-я кнопка «активна», когда я не зависаю над кнопкой или чем-то еще. Кажется, это происходит после того, как я меняю вкладки.

alt text

Подозреваю, что при смене вкладок фокусируется 1-й элемент управления. Это тот случай? Я занимаюсь разработкой приложения MVVM, поэтому, исходя из модели представления, как можно вместо этого сфокусировать текстовое поле?

Ответы [ 2 ]

2 голосов
/ 02 ноября 2010

Поскольку концепция фокусировки в WPF довольно сложна, у меня есть класс под названием FocusEnforcer.

Это действительно гарантирует, что нужный элемент управления получит фокус, несмотря ни на что.

public static class FocusEnforcer
{
    public static void EnforceFocus(UIElement element)
    {
        if (!element.Focus())
        {

            element.Dispatcher.BeginInvoke(DispatcherPriority.Input, 
                                            new ThreadStart(delegate()
                                                            {
                                                                element.Focus();
                                                            }));

        }

    }
}
0 голосов
/ 15 марта 2011

Такое поведение требует только этого: поведения. Или, по крайней мере, новое прикрепленное свойство.

  1. Создание вложенного свойства для элементов управления вкладками.
  2. Создать обработчик для изменений этого присоединенного свойства.
  3. В этом обработчике подпишитесь на событие SelectionChanged TabControl.
  4. В обработчике событий SelectionChanged используйте метод TabControl.FindName, чтобы получить текстовое поле.
  5. Выполните метод FocusManager.SetFocusedElement, используя TabControl в качестве области фокусировки.
...