如何在treeViewItem周围添加边框,包括箭头WPF / C#

时间:2017-10-13 12:00:49

标签: c# wpf treeview treeviewitem

我正在尝试更改TreeView的设计,以便在每个TreeViewItem周围添加边框。 您可能知道,如果我向TreeViewItem添加边框,就像这样

<TreeView Name="treeView">
    <TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem">
      <Setter Property="IsExpanded" Value="true">
      </Setter>
        <Setter Property="BorderBrush" Value="Green"></Setter>
        <Setter Property="BorderThickness" Value="2,2,2,2" />
     </Style>
  </TreeView.ItemContainerStyle>
  <TreeView.ItemTemplate>
      <-- my template -->
  </TreeView.ItemTemplate>
</TreeView>

边框不会在箭头周围,它会是这样的:

how treeViewItem border works

我想做的事情如下图所示:

enter image description here

我怎么能实现这个目标?它甚至可能吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

我已经设法制作了一些东西,真的很可笑但是我能想到的就是...... 我读到了关于ItemPresenter和ControlTemplate的信息,我认为可以用它来完成,但我发现Expander类有点令人困惑,特别是因为我有三级孩子而且我无法找到关于让Expander为他们工作的相关内容。 所以,我的解决方案是制作一个模板,在其中我创建了一个由两行组成的网格:第一个是正常高度,第二个是高度为1和-160边距的矩形(以补偿缩进)。

<StackPanel Background="Transparent" Margin="20,20,20,20">
    <Border BorderThickness="1" BorderBrush="Gray" Margin="0">
        <TreeView Name="treeView" BorderThickness="0" Background="Transparent" Height="400" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <TreeView.ItemContainerStyle>
                <Style TargetType="TreeViewItem">
                    <Setter Property="IsExpanded" Value="{Binding IsExpanded}" />
                </Style>
            </TreeView.ItemContainerStyle>
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="30"/>
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <Border Grid.Column="0" Grid.Row="0">
                            <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" Click="CheckBox_Click" VerticalAlignment="Center">
                                <TextBlock Text="{Binding Description}" Width="250" Margin="0,0,0,0"/>
                            </CheckBox>
                        </Border>
                        <Rectangle Grid.Row="1" Grid.Column="0"  HorizontalAlignment="Stretch" Fill="Gray" Height="1" Margin="-160"/>
                    </Grid>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>
    </Border>