仅在wpf

问题描述

我的TreeView最终看起来像这样。

+ level 1
- level 2
   + level 2.1
   + level 2.2  
+ level 3

我的要求是仅在此类顶级项目之后显示分隔符:

+ level 1
  ----------
- level 2
   + level 2.1
   + level 2.2
  -----------  
+ level 3

我提到了这个现有的问题WPF TreeView Style with Seperator,但是当我实现时,我发现分隔符被拉伸得很长,并且在不需要的每个级别之后都添加了分隔符。

这是我的TreeView代码

 <TreeView ItemsSource="{Binding PersonviewmodelList}">
        <TreeView.Resources>
            <HierarchicalDataTemplate ItemsSource="{Binding Persons}" DataType="{x:Type local:Personviewmodel}">
                <TextBlock Text="{Binding CountryType}" FontWeight="Bold"/>                                                      
            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>

解决方法

您可以在HierarchicalDataTemplate中添加分隔符元素,例如:

<TreeView ItemsSource="{Binding PersonViewModelList}">
    <TreeView.Resources>
        <HierarchicalDataTemplate ItemsSource="{Binding Path=Names}" DataType="{x:Type local:PersonViewModel}">
            <DockPanel>
                <Border BorderThickness="1,1,1"
                                Height="1"
                                Width="{Binding ActualWidth,RelativeSource={RelativeSource AncestorType=TreeViewItem}}"
                                DockPanel.Dock="Bottom">
                    <Border.BorderBrush>
                        <DrawingBrush Viewport="0,8,8" ViewportUnits="Absolute" TileMode="Tile">
                            <DrawingBrush.Drawing>
                                <DrawingGroup>
                                    <GeometryDrawing Brush="Silver">
                                        <GeometryDrawing.Geometry>
                                            <GeometryGroup>
                                                <RectangleGeometry Rect="0,50,50" />
                                                <RectangleGeometry Rect="50,50" />
                                            </GeometryGroup>
                                        </GeometryDrawing.Geometry>
                                    </GeometryDrawing>
                                </DrawingGroup>
                            </DrawingBrush.Drawing>
                        </DrawingBrush>
                    </Border.BorderBrush>
                </Border>
                <TextBlock Text="{Binding CountryType}" />
            </DockPanel>
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>