Пользовательский TabItem в TabControl - PullRequest
0 голосов
/ 18 апреля 2010

Я создал CustomTabItem, который наследуется от TabItem, и я хотел бы использовать его при привязке ObservableCollection в TabControl

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

Это должно нравиться в XAML, но я не знаю, как изменить тип по умолчанию для элемента вывода, созданного TabControl при связывании.

Я пытался создать конвертер, но он должен делать что-то вроде этого внутри метода convertin:

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

И итерации по моему вводу ObservableCollection, создайте мой CustomTab на основе элемента из коллекции и добавьте его в resultList ...

Я бы хотел этого избежать, поскольку при создании CustomTabItem я создаю сложное представление, и это занимает некоторое время, поэтому я не хочу создавать его всегда, когда что-то меняется в связанной коллекции.

Мой класс расширяет типичный TabItem, и я хотел бы использовать этот класс в TabControl вместо TabItem.

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

Код выше генерирует ошибку, что Стиль не может быть применен к TabItem.

Моя основная цель - использовать в XAML свой собственный CustomTabItem и свойства связывания ... Как и выше ...

Я также пытался использовать

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

Но это просто стили для TabItem, поэтому я все еще буду скучать по своим свойствам, которые я добавил в свой пользовательский класс.

1 Ответ

4 голосов
/ 18 апреля 2010

Вам потребуется создать пользовательский класс, производный от TabControl, и переопределить GetItemForContainerOverride, чтобы вернуть ваш пользовательский TabItem:

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