2014-05-06 3 views
0

Je rencontre différents problèmes avec la virtualisation des vues dans le TabControl. Heureusement, j'ai trouvé quelque chose qui, je pense, va résoudre tous mes problèmes dans this CodeProject article. Un problème est introduit par cette solution, et c'est qu'il détruit mon HeaderTemplate. L'en-tête de l'onglet a le même contenu que le contrôle de contenu.Spécifier la liaison pour HeaderTemplate par programme

Mon point de vue utilise un TabControl comme celui-ci:

<TabControl 
     behaviors:TabItemGeneratorBehavior.ItemsSource="{Binding MyItems, Mode=OneWay}" 
     behaviors:TabItemGeneratorBehavior.SelectedItem="{Binding MySelectedItem, Mode=TwoWay}"> 

    <TabControl.Resources> 
     <Style TargetType="TabItem"> 
      <Setter Property="HeaderTemplate"> 
       <Setter.Value> 
        <DataTemplate> 
         <ContentPresenter> 
          <ContentPresenter.Content> 
           <TextBlock Text="{Binding Title}"/> 
          </ContentPresenter.Content> 
         </ContentPresenter> 
        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </TabControl.Resources> 
</TabControl> 

Le behaviors:TabItemGeneratorBehavior est de l'article CodeProject. A l'intérieur du TabItemGeneratorBehavior est une méthode qui génère TabItems:

private void AddTabItem(object item) 
{ 
    var contentControl = new ContentControl(); 
    var tab = new TabItem 
     { 
      DataContext = item, 
      Content = contentControl, 
      HeaderTemplate = _tabControl.ItemTemplate 
     }; 

    contentControl.SetBinding(ContentControl.ContentProperty, new Binding()); 
    tab.SetBinding(HeaderedContentControl.HeaderProperty, new Binding()); 

    _tabControl.Items.Add(tab); 
} 

Je pense que mon problème est avec la ligne qui définit la liaison pour la HeaderProperty. Comment puis-je définir la liaison afin qu'elle utilise le HeaderTemplate défini dans mon code XAML ci-dessus?

Répondre

0

OP ici.

La solution consiste à supprimer l'affectation HeaderTemplate lors de la création du TabItem:

var tab = new TabItem 
    { 
     DataContext = item, 
     Content = contentControl, 
     // HeaderTemplate = _tabControl.ItemTemplate 
    }; 
Questions connexes