Инициирование UserControl через MVVM в проблеме WPF / focus - PullRequest
1 голос
/ 12 июня 2010

У меня есть несколько пользовательских контролов, загруженных в tabcontrol через MVVM в WPF.

В XAML для usercontrol я устанавливаю фокус на текстовое поле с помощью FocusManager, однако это работает только при создании первого экземпляра usercontrol.

Просто для проверки я добавил загруженный обработчик событий в usercontrol - он вызывается только в первом экземпляре.

Я использую шаблоны данных для пользовательских элементов управления следующим образом:

    <DataTemplate DataType="{x:Type local:UserTypeViewModel}">
        <local:UserTypeView />
    </DataTemplate>

Текстовое поле сфокусировано следующим образом:

    FocusManager.FocusedElement="{Binding ElementName=txtName}"

Кроме того, я использую глобальный обработчик событий (для события GotFocus в текстовом поле), который выделяет весь текст с помощью диспетчера.

Если у кого-нибудь есть какие-либо советы о том, как добиться фокуса с каждым контролем пользователя, я был бы очень признателен.

Спасибо, Бен.

1 Ответ

3 голосов
/ 12 июня 2010

Помните, что визуальный элемент может получать фокус, только если:

  • Он видим (в TabControl одновременно может быть виден только один tabitem
  • IsFocusable должен быть установленв true (по умолчанию false для UserControls)
  • Он завершил загрузку (как вы пишете - сделайте это в событии Loaded))

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

Что касается того, как этого добиться для всех элементов управления - вы можете использовать стиль с EventSetter для события Loaded.Однако вам нужно создать стиль для каждого типа элемента управления, чтобы не устанавливать его для каждого элемента управления.

...