Что было бы лучшим способом изменить ориентацию древовидной структуры WPF. Я хотел бы, чтобы функция развертывания-свертывания работала слева направо, а не сверху вниз. Т.е. когда я нажимаю кнопку «Развернуть» трехуровневого узла, я бы его подузел отображался справа от родителя, а отступ должен работать сверху вниз. Также вертикальные линии, соединяющие узел, теперь должны быть горизонтальными.
WPF TreeView с горизонтальной ориентацией?
Ответы (2)
Вот отличная статья Джоша Смита на CodeProject, в которой подробно рассказывается, как это сделать. вещи.
Чтобы развернуть статью Джона Смита CodeProject, если вы хотите иметь горизонтальный макет на только на определенном уровне в дереве (а не на всех уровнях, как показано в его статье), затем просто установите свойство ItemsPanel
на TreeViewItem
на том уровне, на котором вы хотите иметь StackPanel
.
Сначала мне это не было интуитивно понятно, но вы можете получить доступ к этому свойству с помощью свойства ItemContainerStyle
свойства HierarchicalDataTemplate
для слоя над слоем, который вы хотите расположить горизонтально.
Нравится:
<ItemsPanelTemplate
x:Key="ItemsPanelForHorizontalItems">
<StackPanel
Orientation="Horizontal"/>
</ItemsPanelTemplate>
<HierarchicalDataTemplate
x:Key="DataTemplateForLayerAboveHorizontalItems"
DataType="{x:Type viewModel:ThingHavingHorizontalItems}"
ItemsSource="{Binding HorizontalItems}"
ItemTemplate="{StaticResource DataTemplateForLayerWithHorizontalItems}">
<HierarchicalDataTemplate.ItemContainerStyle>
<Style
TargetType="TreeViewItem">
<Setter
Property="ItemsPanel"
Value="{StaticResource ItemsPanelForHorizontalItems}"/>
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<ContentControl
Content="{Binding}"
ContentTemplate="{StaticResource DataTemplateForThingHavingHorizontalItems}"/>
</HierarchicalDataTemplate>
Следуя этому шаблону, вы сможете установить горизонтальную компоновку для любого отдельного слоя в вашем дереве, кроме корневого слоя. И если вы хотите, чтобы корневой слой был горизонтальным, просто установите свойство ItemsPanel
на TreeView
, чтобы использовать горизонтальный StackPanel
.