如何在wpf treeview上对齐按钮

时间:2010-08-14 12:17:33

标签: wpf treeview

您好我正在寻找一种方法来对齐我的树视图中的按钮,以便它看起来像在同一列中,即使它在任何级别。 例如:

Item1 [Button]
 Item2 [Button]
Item3[Button]

我希望它看起来像

Item1  [Button]
 Item2 [Button]
Item3  [Button]

我能以任何方式做到这一点..?

1 个答案:

答案 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>