Как установить ItemContainerStyle только для первого уровня TreeView?

Я хочу измениться ItemContainerStyle только для предметов первого уровня. И оставьте стиль по умолчанию для более глубоких уровней. Это возможно?

2 ответа

Решение

Да, вы бы создали кастом StyleSelector который может выбрать другой стиль на основе любых критериев, которые вы решите. В вашем случае вы хотели бы проверить, какие ItemsControl владел контейнер (как в TreeView каждый TreeViewItem является ItemsControl и владеет своими детьми).

public class TreeViewFirstItemStyleSelector : StyleSelector
{
    public override Style SelectStyle(object item, DependencyObject container)
    {
        var element = container as TreeViewItem;
        if (element != null && ItemsControl.GetItemsOwner(element) is TreeView)
            return element.FindResource("customStyle") as Style;

        return null;
    }
}

Затем вы должны установить его в свойстве ItemContainerStyleSelector TreeView.

Вы должны использовать StyleTriggers и проверить элементы, если они являются первым элементом. Этот код просто идея:

<Style.Triggers>
                <Trigger Property="IsFirst" Value="True">
                    <Setter Property="Color" Value="Red" />
                </Trigger>

Другие вопросы по тегам