如何在wpf treeview上对齐按钮

bij*_*iju 8 wpf treeview

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

Item1 [Button]
 Item2 [Button]
Item3[Button]
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像

Item1  [Button]
 Item2 [Button]
Item3  [Button]
Run Code Online (Sandbox Code Playgroud)

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

Qua*_*ter 8

首先,看一下TreeViewItems上的这篇博客文章水平拉伸.TreeViewItem的默认ControlTemplate不允许标题内容延伸,您需要它来执行.使用作者推荐的TreeViewItem样式,但更改

<Setter Property="HorizontalContentAlignment" Value="Center" />
Run Code Online (Sandbox Code Playgroud)

<Setter Property="HorizontalContentAlignment" Value="Stretch" />
Run Code Online (Sandbox Code Playgroud)

现在,您将拥有一个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>
Run Code Online (Sandbox Code Playgroud)

如果按钮的内容可能具有可变大小,并且您希望它们具有相同的宽度,请使用带有SharedSizeScope的网格.Grid.IsSharedSizeScope="True"在TreeView中设置然后在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>
Run Code Online (Sandbox Code Playgroud)