Дочерние узлы TreeView расширяются, но корневой узел не расширяется - PullRequest
1 голос
/ 31 марта 2012

У меня странная проблема с WPF / XAML. По умолчанию я хочу, чтобы все узлы в этом TreeView были расширены. В конце концов я свяжу это с моей моделью представления, но сейчас я просто хочу, чтобы они все были расширены по умолчанию.

Это часть кода (который я сейчас использую)

<HierarchicalDataTemplate DataType="{x:Type Model:DirectoryItem}"
                          ItemsSource="{Binding Items}">
    <TextBlock Text="{Binding Path=Name}"
               ToolTip="{Binding Path=Path}" />
    <HierarchicalDataTemplate.ItemContainerStyle>   
        <Style TargetType="TreeViewItem">
            <Setter Property="IsExpanded" Value="True" />
        </Style> 
    </HierarchicalDataTemplate.ItemContainerStyle>
</HierarchicalDataTemplate>

<DataTemplate DataType="{x:Type Model:FileItem}">
    <TextBlock Text="{Binding Path=Name}"
               ToolTip="{Binding Path=Path}" />
</DataTemplate>

В частности, часть, где у меня есть свойство setter как IsExpanded.

Как видно из рисунков ниже, этот код работает. Если я разверну корневые узлы, то по умолчанию все будет развернуто.

Но почему корневые узлы также не раскрываются по умолчанию? Я понятия не имею, почему он это делает.

enter image description here enter image description here

1 Ответ

1 голос
/ 31 марта 2012

Они не раскрываются, вероятно, потому что вы добавляете стиль в шаблон иерархических данных, и это относится только к дочерним элементам (правда, только к теории).

Использование стилей в DataTemplate является своего рода запахом кода- это шаблон для данных, а не визуальное представление, поэтому он не должен содержать стиль для treeViewItem (в следующий раз это может быть что-то другое, также иерархическое).

Я полагаю, вы делаете это так:

<TreeView.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <Setter Property="TreeViewItem.IsExpanded" Value="True"/>
            </Style>
 </TreeView.ItemContainerStyle>
...