我在TabControl
中虚拟化视图时遇到了各种问题。幸运的是,我发现了一些我认为可以解决this CodeProject article中所有问题的东西。
此解决方案引入了一个问题,那就是它会破坏我的HeaderTemplate
。选项卡标题与内容控件具有相同的内容。
我的视图使用TabControl,如下所示:
<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>
behaviors:TabItemGeneratorBehavior
来自CodeProject文章。 TabItemGeneratorBehavior
内部是一种生成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);
}
我认为我的问题在于为HeaderProperty
设置绑定的行。如何设置绑定,以便它使用我上面的XAML中定义的HeaderTemplate
?
答案 0 :(得分:0)
解决方案是在创建HeaderTemplate
时删除TabItem
分配:
var tab = new TabItem
{
DataContext = item,
Content = contentControl,
// HeaderTemplate = _tabControl.ItemTemplate
};