Как выровнять кнопку на дереве wpf - PullRequest
8 голосов
/ 14 августа 2010

Привет, я ищу способ выровнять кнопки в моем дереве, чтобы он выглядел как в одном столбце, даже если он находится на любом уровне. Например:

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

я хочу, чтобы это выглядело

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

Как я могу это сделать?

1 Ответ

8 голосов
/ 14 августа 2010

Сначала взгляните на эту запись в блоге Горизонтальное растяжение в TreeViewItems . Стандартный ControlTemplate для TreeViewItem не позволяет растягивать содержимое заголовка, что вам потребуется. Используйте стиль TreeViewItem, который рекомендует автор, но измените

<Setter Property="HorizontalContentAlignment" Value="Center" />

до

<Setter Property="HorizontalContentAlignment" Value="Stretch" />

Теперь у вас будет TreeViewItem, где содержимое заголовка растягивается на всю ширину TreeViewItem. Чтобы заставить TreeViewItem отображаться с текстом и кнопкой, используйте свойство ItemTemplate TreeView. Если вы просто хотите, чтобы кнопки были выровнены по правому краю, вы можете использовать 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>

Если содержимое кнопок может иметь переменный размер, и вы хотите, чтобы все они имели одинаковую ширину, используйте Grid с 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...