Я много раз искал SO и Google вокруг этой проблемы, но не могу найти ничего другого, чтобы попробовать.WPF Focus In Tab Control Content Когда создана новая вкладка
У меня есть MainView (окно), содержащее элемент управления вкладкой. Элемент управления вкладкой привязан к ObservableCollection дочерних элементов (пользовательских элементов управления). В ViewModel MainView есть метод, который позволяет добавлять в набор ChildViews, который затем создает новую вкладку. Когда создается новая вкладка, она становится активной вкладкой, и это отлично работает. Этот метод в MainView вызывается из другого ViewModel (OtherViewModel).
То, что я пытаюсь сделать, - установить фокус клавиатуры на первый элемент управления на вкладке (AutoCompleteBox из WPFToolkit *) при создании новой вкладки. Мне также необходимо настроить фокус таким же образом, но БЕЗ создания новой вкладки (поэтому установите фокус на текущей активной вкладке).
(* Обратите внимание, что с AutoCompleteBox возникают проблемы с фокусом - даже если у него есть фокус, вам нужно отправить MoveNext(), чтобы получить курсор в его окне. Я уже работал над этим).
Итак, вот в чем проблема. Фокусировка работает, когда я не создаю новую вкладку, но она не работает, когда я создаю новую вкладку. Обе функции используют один и тот же метод для установки фокуса, но логика создания сначала вызывает метод, который создает новую вкладку и устанавливает ее в активную. Код, который устанавливает фокус (в CodeBehind в ChildView в):
IInputElement element1 = Keyboard.Focus(autoCompleteBox);
//plus code to deal with AutoCompleteBox as noted.
В любом случае, Keyboard.FocusedElement начинается как MainView. После создания вызова вызов Keyboard.Focus, кажется, ничего не делает (сфокусированный элемент по-прежнему является MainView). Вызов этого без создания вкладки правильно устанавливает фокус клавиатуры в autoCompleteBox.
Любые идеи?
Update:
предложение Бендера наполовину работал.
Итак, теперь в обоих случаях сфокусированным элементом является правильно AutoCompleteBox. То, что я тогда делаю, это MoveNext(), который устанавливает фокус на TextBox. Я предполагаю, что это текстовое поле является внутренним для AutoCompleteBox, поскольку фокус был правильно установлен на экране, когда это произошло. Теперь я не уверен. Это по-прежнему поведение, которое я вижу, когда этот код попадает, когда НЕ делает создание. После создания MoveNext() устанавливает фокус на элемент обратно в мой MainView.
Проблема должна все же быть в соответствии с ответом Бендера, где состояние элементов управления не зависит от того, была ли создана новая вкладка или нет. Любые другие мысли?
Final Update
Как уже отмечалось, предложение majocha работал.
Я хотел обновить это на случай, если кто-то случится по этой же проблеме с автозаполнением. Похоже, что настройка фокуса не активирует его в пользовательском интерфейсе - вам нужно сделать MoveNext, чтобы переместить фокус вперед один раз во внутреннее текстовое поле элемента управления. Это основано на моем опыте отладки, который не может быть на 100% научным. Если у меня будет время, я попытаюсь создать небольшой репрограммный проект и отправить его команде WPFToolkit.
Это сработало! Спасибо за вашу помощь. –