2010-03-24 4 views
0

J'ai un TabControl qui est lié à un modèle de vueWPF TabBarControl Réglage Mise au point à l'élément lorsque l'onglet change

  <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> 

Chaque onglet contient simplement un modèle Voir article. J'utilise un gabarit de données pour l'afficher.

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

Lorsque l'onglet en cours est modifié, je veux que l'accent soit sur la zone de texte (ce qui est un exemple simple, dans mon code de production j'ai un DataGrid) dans le modèle de données. comment puis-je accomplir cela?

+0

Réglage de la mise au point dans le code ou XAML? – Timores

+0

ce serait bien de le faire en xaml, le nombre d'éléments de l'onglet est dynamique. Le définir dans le code, signifierait chalutage de l'arbre visuel à la recherche d'une zone de texte. Une solution générale pour la définition de l'élément focalisé à l'origine sur un modèle de données associé à la définition du focus sur une barre d'onglets serait bonne. Mais cela ne me dérange pas d'utiliser du code. même dérivant de la barre d'onglet, donc je n'ai pas eu à le mettre dans le code derrière. –

Répondre

0

Je ne suis pas entièrement sûr que vous pouvez définir le focus sur un UIElement lorsque vous avez le modèle défini dans un DataTemplate. Au lieu de travailler directement avec le DataTemplate, vous pouvez placer le contenu de votre DataTemplate dans un UserControl, puis définir le focus sur votre TextBox de manière procédurale.

<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> 

Et dans le Code Derrière l'UserControl:

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

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

J'ai travaillé un petit projet et en poussant le DataTemplate dans le UserControl, la zone de texte a reçu le focus lorsque l'onglet a été changé.

Questions connexes