J'essaie de créer une vue dans WPF et j'ai du mal à comprendre comment le configurer. Voici ce que je suis en train de construire:Comment puis-je aligner les éléments WPF dans un Horizontal WrapPanel afin qu'ils s'alignent en fonction d'un point vertical arbitraire dans chaque élément?
- Mon ViewModel expose une propriété IEnumerable appelée Articles
- Chaque élément est un événement sur une ligne de temps, et chacun met en œuvre ITimelineItem
- Le ViewModel pour chaque élément a sa propre DataTemplate à pour l'afficher
- Je veux afficher tous les éléments sur la timeline connectés par une ligne. Je pense qu'un WrapPanel à l'intérieur d'un ListView fonctionnerait bien pour cela.
- Cependant, la hauteur de chaque élément varie en fonction de l'information qu'il affiche. Certains objets auront des objets graphiques directement sur la ligne (comme un cercle ou un diamant, ou autre), et certains ont des annotations au-dessus ou en dessous de la ligne.
Donc, il me semble compliqué. Il semble que chaque élément de la chronologie doit rendre son propre segment de la ligne. C'est très bien. Mais la distance entre le haut de l'article à la ligne (et le bas de l'article à la ligne) pourrait varier. Si un élément a la ligne 50 px en haut et l'élément suivant a la ligne 100 px en haut, alors le premier élément a besoin de 50 px de remplissage pour que les segments de ligne s'additionnent.
Je pense que je pourrais résoudre ce problème, cependant, nous avons seulement besoin d'ajouter un remplissage si ces deux éléments sont sur la même ligne dans le WrapPanel! Disons qu'il y a 5 éléments et seulement de la place sur l'écran pour 3 à travers ... le WrapPanel mettra les deux autres sur la ligne suivante. Ce n'est pas grave, mais cela signifie que seulement les 3 premiers ont besoin de se tamponner ensemble, et les 2 derniers ont besoin de se mettre ensemble.
C'est ce qui me donne mal à la tête. Y a-t-il une autre approche que je pourrais envisager?
EDIT: Je suis penché pour remplacer le WrapPanel avec un panneau personnalisé qui hérite de Canvas et remplace les méthodes MeasureOverride et ArrangeOverride.
C'est certainement une solution utile pour dessiner les lignes. Merci! Mais je suis toujours à la recherche d'un moyen d'organiser les éléments de sorte qu'ils s'alignent tous là où ils le devraient. Les lignes sont toutes horizontales et droites, donc ce sont les objets qui doivent se déplacer pour compenser. –
Les ornements résolvent également mes indicateurs visuels drag & drop! Merci de m'apprendre quelque chose de nouveau! –
J'ai mis à jour mon post avec une suggestion pour résoudre votre problème d'alginment. – bitbonk