这是我想要实现的目标的直观想法:
我希望左侧和右侧的所有按钮都垂直对齐,无论 TreeViewItem 位于树中的哪个位置。我在实现这种效果时遇到了困难,同时也让标题以典型的嵌套方式缩进。
我最近的尝试涉及修改 TreeViewItem 模板;将按钮放在跨越主网格中所有列的 DockPanel 中(停靠在左侧或右侧),将扩展器和标题放在中间列中,并使 ItemsPresenter (ItemsHost) 跨越下一行上的所有列。这使得所有内容都对齐,包括标题内容。
这是我目前的 TreeViewItem 样式的简化版本:
<Style x:Key="ExpandCollapseToggleStyle" TargetType="{x:Type ToggleButton}">
<Setter Property="Focusable" Value="False"/>
<Setter Property="Width" Value="16"/>
<Setter Property="Height" Value="16"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border Background="Transparent" Height="16" Padding="5,5,5,5" Width="16">
<Path x:Name="ExpandPath" Data="{StaticResource TreeArrow}" Fill="{StaticResource TreeViewItem.TreeArrow.Static.Fill}" Stroke="{StaticResource TreeViewItem.TreeArrow.Static.Stroke}">
<Path.RenderTransform>
<RotateTransform Angle="135" CenterY="3" CenterX="3"/>
</Path.RenderTransform>
</Path>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="RenderTransform" TargetName="ExpandPath">
<Setter.Value>
<RotateTransform Angle="180" CenterY="3" CenterX="3"/>
</Setter.Value>
</Setter>
<Setter Property="Fill" TargetName="ExpandPath" Value="{StaticResource TreeViewItem.TreeArrow.Static.Checked.Fill}"/>
<Setter Property="Stroke" TargetName="ExpandPath" Value="{StaticResource …Run Code Online (Sandbox Code Playgroud)