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?