2009-10-09 11 views
4

J'ai une fenêtre WPF qui affiche un ListBox. J'ai modifié le modèle d'élément ListBox afin que la zone de liste affiche les éléments rectangulaires qui peuvent être sélectionnés.Modifier la façon dont les éléments sont affichés Zone de liste WPF

Maintenant, je voudrais modifier le ListBoxItemsPanelTemplate de sorte que les éléments sont affichés dans une grille au lieu d'une liste verticale ou horizontale. Plus précisément, j'aimerais que le premier élément apparaisse dans le coin supérieur droit du ListBox, puis le deuxième sous-objet et le troisième sous ce point jusqu'à ce que la hauteur de l'élément suivant rende la colonne plus haute que la hauteur du ListBox lui-même. À ce stade, il devrait commencer une deuxième colonne directement à la droite du premier élément ajouté. Si la largeur totale de toutes les colonnes combinées était supérieure à la largeur du ListBox, une barre de défilement horizontale devrait apparaître.

Y at-il un moyen d'obtenir cet effet simplement en modifiant le ItemsPanelTemplate ou dois-je étendre la classe ListBox elle-même? Dans les deux cas, comment pourrais-je m'en occuper?

Merci pour votre aide!

Répondre

4

Je n'ai pas testé, mais je soupçonne que vous pouvez obtenir l'effet désiré en échangeant le panneau par défaut utilisé par le ListBox à un WrapPanel:

<ListBox> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel Orientation="Vertical"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 
+0

Merci pour l'aide! Cela résout essentiellement cela, mais le code ci-dessus 'tel quel' crée simplement une longue liste verticale. L'astuce pour l'obtenir pour créer une grille comme je l'ai décrit est d'ajouter cet attribut à la balise ListBox: ScrollViewer.VerticalScrollBarVisibility = "Désactivé" – Evan