Сначала взгляните на эту запись в блоге Горизонтальное растяжение в 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>