在TreeViewItem的所有子项周围添加边框

Jos*_*lin 8 wpf treeview xaml hierarchicaldatatemplate

我有一个TreeView,我正在尝试实现一种样式,允许我使用HierarchicalDataTemplate.在特定节点的所有子节点周围放置边框.我想要的一个例子如下所示:

在此输入图像描述

以下代码是我到目前为止的代码.

<HierarchicalDataTemplate DataType="{x:Type model:Node}" ItemsSource="{Binding Children, Mode=OneWay}">
     <StackPanel>
          <TextBlock Text="{Binding Name}"/>
     </StackPanel>
     <HierarchicalDataTemplate.ItemContainerStyle>
          <Style TargetType="{x:Type TreeViewItem}">
              //what goes in here???
          </Style>
     </HierarchicalDataTemplate.ItemContainerStyle>     
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)

我需要添加什么来实现我想要的边框?

Viv*_*Viv 12

为了渲染一个Border子集合,TreeViewItem我们需要修改Stylefor ItemContainerStyleTreeView

TreeViewItem Style默认情况下使用a <ItemsPresenter x:Name="ItemsHost" />来呈现它的子项内容.

默认情况下儿童的内容ItemContainerStyle由.给出

<ItemsPresenter x:Name="ItemsHost"
                Grid.Row="1"
                Grid.Column="1"
                Grid.ColumnSpan="2" />
Run Code Online (Sandbox Code Playgroud)

现在为了测试这个我有一个名为bool的Collection,Type只是试图Border在这个bool为True时呈现一个

所以,我更新了ItemsPresenter

<Border Grid.Row="1"
        Grid.Column="1"
        Grid.ColumnSpan="2"
        BorderThickness="1">
  <Border.Style>
    <Style TargetType="{x:Type Border}">
      <Setter Property="BorderBrush"
              Value="Transparent" />
      <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor,
                                       AncestorType={x:Type TreeViewItem}},
                                       Path=DataContext.Type}"
                      Value="True">
          <Setter Property="BorderBrush"
                  Value="Red" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Border.Style>
  <ItemsPresenter x:Name="ItemsHost"  />
</Border>
Run Code Online (Sandbox Code Playgroud)

然后呈现以下内容

在此输入图像描述

您当然必须根据您自己想要Border渲染的情况更新上面的Bindings .

在我的情况下Type,对于具有"1.1"的项目,我的变量被设置为True,因为它是标题内容.