2017-01-31 4 views
0

Это вопрос MVVM WPF., C#. в пределах окна у меня есть элемент управления Tab, который выглядит следующимКак установить фокус на текстовое поле в представлении (элемент управления пользователя), выбранном по виду табуляции

<TabControl TabStripPlacement="Top" > 
    <TabItem Style="{StaticResource Tabitemstyle}"> 
    <TabItem.Header> 
    <Label Content="Home" Style="{StaticResource Tablablestyle}"/> 
    </TabItem.Header> 
    <v:HomePageView/> 
    </TabItem> 
    <TabItem .... 
    <v:OtherPageView/> 

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

Я пробовал несколько решений, но ближе всего один до сих пор (с использованием данных стиля запуска, или целенаправленный элемент) почти работает:

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

ответ

0

Я хотел бы использовать код позади:

  • Прослушивание видимости изменилось событие на содержание TabItem (т.е. v: HomePageView)

  • Найти элемент текстового поля пользовательского интерфейса (вы можете просто дать TextBox имя в XAML и обратиться к нему из кода позади)

  • Далее, установите фокус на текстовом поле, используя UIElement.Focus() метод

  • И наконец, если клавиатура не сфокусировалась, используйте метод Keyboard.Focus (...) , чтобы сфокусировать клавиатуру на текстовом поле.

+0

спасибо. Мой код похож на http://stackoverflow.com/questions/17063014/tabcontrols-containing-different-user-controls-using-mvvm?rq=1 Хотя проблема другая. Программа имеет 5 вкладок, 4 из которых я хочу настроить фокус на конкретное текстовое поле, когда эта вкладка выбрана. Есть ли способ просто прислушаться к тому, что представление становится активным? Как сообщить элементу управления Tab во внешнем окне потерять фокус и передать его в v: OtherPageView? NB: В рамках OtherPageView я могу использовать световые сообщения MVVM для установки элемента управления после того, как пользователь взаимодействует с этим представлением. – user3564895

+0

Я не уверен, что хорошо понимаю вас: Каждый раз, когда вы нажимаете на элемент вкладки, поведение по умолчанию для WPF-элемента управления по умолчанию заключается в том, чтобы снова воссоздать его содержимое. -> В этот момент представление может быть изолировано от попыток TabControl взять под контроль фокус с использованием вышеупомянутого метода Я не знаком с MVVM Light, но вы можете использовать событие SelectionChanged в элементе управления вкладкой, а в его обработчике попытаться выяснить, есть ли вид, используемый в свойстве TabControl.Content. – Ahmad

+0

Код за вызовом из XAML (OtherPageView.xaml) IsVisibleChanged = "UserControl_IsVisibleChanged" Затем с помощью http://stackoverflow.com/questions/3971179/wpf-tabcontrol-on-selectionchanged-set-focus-to-a-text-field для эта страница xaml.cs (если видимо) Despatcher.BeginInvoke (новое действие (() => {boxname.Focus();})); и это работает. – user3564895