3

改变 WPF 树视图方向的最糟糕的方法是什么。我想使用展开折叠功能从左到右而不是从上到下工作。即,当我单击树节点的展开按钮时,我会使其子节点出现在父节点的右侧,并且缩进应该自上而下地工作。此外,连接节点的垂直线现在必须是水平的。

4

2 回答 2

8

这是Josh Smith 在 CodeProject 上的一篇很棒的文章,详细介绍了如何做这种事情。

于 2008-12-12T20:47:59.410 回答
2

要扩展John Smith 的 CodeProject 文章,如果您只想在树中的特定级别上进行水平布局(而不是像他的文章显示的那样在所有级别上),那么只需在您想要的级别ItemsPanel上设置属性.TreeViewItemStackPanel

一开始对我来说并不直观,但是你可以通过你想要水平的图层上方的图层的ItemContainerStyle属性来获得这个属性。HierarchicalDataTemplate

像这样:

<ItemsPanelTemplate
    x:Key="ItemsPanelForHorizontalItems">
    <StackPanel
        Orientation="Horizontal"/>
</ItemsPanelTemplate>

<HierarchicalDataTemplate
    x:Key="DataTemplateForLayerAboveHorizontalItems"
    DataType="{x:Type viewModel:ThingHavingHorizontalItems}"
    ItemsSource="{Binding HorizontalItems}"
    ItemTemplate="{StaticResource DataTemplateForLayerWithHorizontalItems}">
    <HierarchicalDataTemplate.ItemContainerStyle>
        <Style
            TargetType="TreeViewItem">
            <Setter
                Property="ItemsPanel"
                Value="{StaticResource ItemsPanelForHorizontalItems}"/>
        </Style>
    </HierarchicalDataTemplate.ItemContainerStyle>
    <ContentControl
        Content="{Binding}"
        ContentTemplate="{StaticResource DataTemplateForThingHavingHorizontalItems}"/>
</HierarchicalDataTemplate>

按照此模式,您可以为树中的任何单个层设置水平布局,根层除外。如果您希望根层是水平的,那么只需将 上的ItemsPanel属性设置TreeView为使用水平StackPanel

于 2017-03-17T15:02:37.993 回答