Thực sự điều bạn muốn làm là chỉnh sửa HierarchicalDataTemplate và thay đổi cách hoạt động của nó. Trang sau, có chế độ xem cao cấp khá tốt về chỉnh sửa Hierarchical Data Template.
Tôi cũng đã tìm thấy this one là khá tốt để bắt đầu. Mặc dù không phải trang nào cụ thể nói phải làm gì, về cơ bản bạn đang thay đổi thuộc tính bố cục trong trình bày mặt hàng.
Chỉnh sửa
Rất tiếc, tôi đã không chính xác. Không phải HierarchicalDataTemplate, nhưng mẫu TreeViewItem.
Xem bên dưới để biết ví dụ. Đây chỉ là cách đơn giản nhất để làm điều đó nếu bạn BIẾT rằng sẽ không có bất kỳ nút cấp thứ ba nào.
Đặc biệt chú ý đến phần tử ItemsPresenter có tên ItemsHost. Nó có biên độ -12,0,0,0. Điều đó có nghĩa rằng lề trái của nó là âm và do đó tràn ra khỏi cột lưới có chứa nó theo hướng trái. Do đó tất cả các nút con sẽ được kéo về bên trái một chút. Nếu bạn có nút cấp thứ ba trong tương lai, chúng cũng sẽ được kéo sang trái. Nếu bạn không muốn điều đó, thì bạn sẽ phải cung cấp các mẫu khác nhau cho các cấp độ nút khác nhau. Nhưng điều đó nằm ngoài phạm vi của câu trả lời này.
<Style x:Key="TreeViewItemStyle1" TargetType="{x:Type TreeViewItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TreeViewItem}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="19" Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ExpandCollapseToggleStyle}"/>
<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="1" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
<ContentPresenter x:Name="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
<ItemsPresenter x:Name="ItemsHost" Grid.ColumnSpan="2" Grid.Column="1" Grid.Row="1" Margin="-12,0,0,0"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsExpanded" Value="false">
<Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/>
</Trigger>
<Trigger Property="HasItems" Value="false">
<Setter Property="Visibility" TargetName="Expander" Value="Hidden"/>
</Trigger>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true"/>
<Condition Property="IsSelectionActive" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
</MultiTrigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="VirtualizingStackPanel.IsVirtualizing" Value="true">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>