2010-03-24 2 views
0

У меня есть TabControl, который привязан к модели представленияWPF TabBarControl Настройка фокуса на элемент при закладке изменения

  <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 Item. Я использую шаблон данных для его отображения.

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

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

+0

Настройка фокуса в коде или XAML? – Timores

+0

было бы неплохо сделать это в xaml, количество вкладок динамическое. Установка его в коде, означала бы траление визуального дерева, ищущего текстовое поле. Было бы полезно общее решение о том, как установить элемент, сфокусированный на основе шаблона данных, в сочетании с тем, как установить фокус на панели вкладок. Но я не против использования кода. даже исходя из панели вкладок, поэтому мне не пришлось помещать его в код позади. –

ответ

0

Я не совсем уверен, что вы можете установить фокус на 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> 

И в код из UserControl:

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

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

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

Смежные вопросы