Разная граница для первого и последнего заголовка элемента TabControl - PullRequest
1 голос
/ 30 января 2012

Мне кажется, что-то здесь не хватает: я хочу TabControl с закругленными углами наверху. Таким образом, первый и последний TabItem должны отличаться от других. Я могу стилизовать все TabItems с использованием стилей, но как мне стилизовать, в частности, первый и последний TabItem / Header?

Чтение первого и последнего элемента в списке TabControl.Items не работает, потому что можно добавить элемент управления не TabItem (например, Button) в TabControl, который затем записывается в список TabControl.Items и, таким образом, может не может быть преобразовано в TabItem. Если я добавляю Button в TabControl, TabControl автоматически создает TabItem, но я не знаю, как получить к нему доступ.

Надеюсь, проблема понятна ... Буду признателен за любой ответ!

1 Ответ

0 голосов
/ 06 февраля 2012

Я решил проблему, используя ItemContainerStyleSelector, который получает экземпляр моего TabControl в своем конструкторе. Затем он может перебирать элементы своего родителя в методе SelectStyle и сравнивать каждый элемент с элементом, переданным ему элементом управления tab. Это выглядит так:

    public override Style SelectStyle(object item, DependencyObject container)
    {
        Style leftStyle = Application.Current.FindResource(Constants.TabItemLeftStyleKey) as Style;
        Style normalStyle = Application.Current.FindResource(Constants.TabItemNormalStyleKey) as Style;
        Style rightStyle = Application.Current.FindResource(Constants.TabItemRightStyleKey) as Style;

        if (item.Equals(this.parent.Items[0]))
        {
            return leftStyle;
        }
        else if (item.Equals(this.parent.Items[this.parent.Items.Count - 1]))
        {
            return rightStyle;
        }
        else
        {
            return normalStyle;
        }
    }
...