您好我正在寻找一种方法来对齐我的树视图中的按钮,以便它看起来像在同一列中,即使它在任何级别。 例如:
Item1 [Button]
Item2 [Button]
Item3[Button]
我希望它看起来像
Item1 [Button]
Item2 [Button]
Item3 [Button]
我能以任何方式做到这一点..?
答案 0 :(得分:8)
首先,请查看此博客条目Horizontal stretch on TreeViewItems。 TreeViewItem的默认ControlTemplate不允许标题内容延伸,您需要它来执行。使用作者推荐的TreeViewItem样式,但更改
<Setter Property="HorizontalContentAlignment" Value="Center" />
到
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
现在您将拥有一个TreeViewItem,其中标题内容在TreeViewItem的整个宽度上延伸。要使用文本和按钮呈现TreeViewItem,请使用TreeView的ItemTemplate属性。如果您只想让按钮右对齐,可以使用DockPanel:
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding ...}">
<DockPanel LastChildFill="False">
<TextBlock DockPanel.Dock="Left" Text="{Binding ...}"/>
<Button DockPanel.Dock="Right" Content="{Binding ...}"/>
</DockPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
如果按钮的内容可能具有可变大小,并且您希望它们具有相同的宽度,请使用带有SharedSizeScope的网格。在TreeView中设置Grid.IsSharedSizeScope="True"
,然后在ItemTemplate中设置如下内容:
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding ...}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition SharedSizeGroup="Buttons"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding ...}"/>
<Button Grid.Column="1" Content="{Binding ...}"/>
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>