WPF TabBarControl Настройка фокуса на элемент при изменении вкладки - PullRequest
0 голосов
/ 25 марта 2010

У меня есть TabControl, который привязан к модели представления

          <TabControl
             ItemsSource="{Binding Path=ViewModelCollection}" >
             <TabControl.ItemContainerStyle>
                <Style
                   TargetType="TabItem"
                   BasedOn="{StaticResource {x:Type TabItem}}">
                   <Setter
                      Property="Header"
                      Value="{Binding Title}" />
                   <Setter
                      Property="Content"
                      Value="{Binding}" />
                </Style>
             </TabControl.ItemContainerStyle>
          </TabControl>

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

  <!-- View Model Template -->
  <DataTemplate
     DataType="{x:Type local:ViewModelItem}">
     <DockPanel>
        <TextBox Text="I want this to have the focus"/>
     </DockPanel>
  </DataTemplate>

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

1 Ответ

0 голосов
/ 25 марта 2010

Я не совсем уверен, что вы можете установить фокус на UIElement, когда у вас есть шаблон, определенный в DataTemplate. Вместо непосредственной работы с DataTemplate вы можете поместить содержимое вашего DataTemplate в UserControl, а затем процедурно сфокусироваться на вашем TextBox.

<Window.Resources>
  <DataTemplate DataType="{x:Type local:ViewModelItem}">
    <ContentControl Content="{Binding Path=YourProperty}" />
  </DataTemplate>
</Window.Resources>


<TabControl ItemsSource="{Binding Path=ViewModelCollection}">
  <TabControl.ItemContainerStyle>
    <Style
       TargetType="TabItem">
        <Setter
          Property="Header"
          Value="{Binding Path=Title}" />
    </Style>
  </TabControl.ItemContainerStyle>
</TabControl>

И в коде позади пользовательского элемента управления:

public MyUserControl()
{
  InitializeComponent();
  this.Loaded += new RoutedEventHandler( OnLoaded );
}

void OnLoaded( object sender, RoutedEventArgs e )
{
  MyTextBox.Focus();
}

Я разработал небольшой проект и, поместив DataTemplate в UserControl, TextBox получил фокус при изменении вкладки.

...