2008-12-12 10 views
2

Quel serait le moyen le plus efficace pour changer l'orientation de l'arborescence de WPF. Je voudrais utiliser la fonctionnalité expand-collapse pour travailler de gauche à droite plutôt que de haut en bas. C'est à dire. Quand je clique sur le bouton d'expansion d'un treenode, je voudrais que son sous-noeud apparaisse à droite du parent et que le retrait soit de haut en bas. Les lignes verticales qui relient le nœud doivent également être horizontales.WPF TreeView avec orientation horizontale?

Répondre

2

développiez John Smith's CodeProject article, si vous voulez avoir la disposition horizontale seulement un niveau particulier dans l'arbre (au lieu de tous les niveaux comme son article montre), puis juste définir la propriété ItemsPanel sur le TreeViewItem au niveau que vous voulez pour avoir un StackPanel.

Ce n'était pas intuitif pour moi au début, mais vous pouvez accéder à cette propriété via la propriété ItemContainerStyle du HierarchicalDataTemplate pour le calque au-dessus du calque que vous voulez horizontal.

Comme ceci:

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

Suivant ce modèle vous permettra de définir la mise en page horizontale pour une couche individuelle au sein de votre arbre, à l'exception de la couche de racine. Et si vous souhaitez que le calque racine soit horizontal, définissez simplement la propriété ItemsPanel sur le TreeView pour utiliser un StackPanel horizontal.

+0

Je dois ajouter que l'expansion d'une couche avec une orientation différente du reste brise la virtualisation de l'interface utilisateur. Voir [cette question] (http://stackoverflow.com/q/42911247/3063273) si vous savez comment résoudre ce problème –