TabControl中的自定义TabItem

时间:2010-04-17 21:53:33

标签: wpf xaml tabcontrol tabitem

我创建了继承自TabItem的CustomTabItem,我想在TabControl中绑定ObservableCollection时使用它

<TabControl ItemsSource="{Binding MyObservableCollection}"/>

它应该在XAML中这样,但我不知道如何更改TabControl在绑定时创建的输出项的默认类型。

我试图创建转换器,但它必须在convertin方法中执行类似的操作:

List<CustomTabItem> resultList = new List<CustomTabItem>();

迭代我的输入ObservableCollection,根据集合中的item创建我的CustomTab并将其添加到resultList ...

我想避免它,因为在创建CustomTabItem时我会创建复杂的View并且需要一段时间,因此我不想在绑定集合中发生更改时始终创建它。

我的类扩展了典型的TabItem,我想在TabControl而不是TabItem中使用这个类。

        <TabControl.ItemContainerStyle>
            <Style TargetType="{x:Type local:CustomTabItem}">
                <Setter Property="MyProperty" Value="{Binding xxx}"/>
            </Style>
        </TabControl.ItemContainerStyle>

上面的代码会生成Style无法应用于TabItem的错误。

我的主要目的是在XAML中使用我自己的CustomTabItem并绑定属性......就像上面......

我也尝试过使用

<TabControl.ItemTemplate/>
<TabControl.ContentTemaplte/>

但它们只是TabItem的样式,所以我仍然会错过我在自定义类中添加的属性。

1 个答案:

答案 0 :(得分:4)

您需要创建一个从TabControl派生的自定义类,并覆盖GetItemForContainerOverride以返回您的自定义TabItem:

protected override DependencyObject GetContainerForItemOverride()
{
  return new CustomTabItem();
}