如何在 treeViewItem 周围添加边框,包括箭头 WPF/C#
how to add border around treeViewItem, including the arrow WPF/C#
我正在尝试更改 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>
边框不会在箭头的周围,会是这样的:
我想要做的是如下图所示:
我怎样才能做到这一点?有可能吗?
谢谢。
我设法做了一些东西,这真的很可笑,但这就是我能想出的一切......
我阅读了有关 ItemPresenter 和 ControlTemplate 的信息,我认为可以使用它来完成,但我发现 Expander class 有点令人困惑,特别是因为我有第三级 children 并且我无法找到一些东西与使 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>
我正在尝试更改 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>
边框不会在箭头的周围,会是这样的:
我想要做的是如下图所示:
我怎样才能做到这一点?有可能吗?
谢谢。
我设法做了一些东西,这真的很可笑,但这就是我能想出的一切...... 我阅读了有关 ItemPresenter 和 ControlTemplate 的信息,我认为可以使用它来完成,但我发现 Expander class 有点令人困惑,特别是因为我有第三级 children 并且我无法找到一些东西与使 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>