2009-07-30 7 views
1

Je veux faire quelque chose que j'ai vu pendant une démo de WPF il y a quelques années. Je ne sais pas comment cela a été fait mais je sais que cela peut être fait, c'est mon problème.WPF ListView animation par réorganisation des articles?

Dans la démo, il y avait une application WPF avec un ListView ou ListBox avec beaucoup d'éléments. Chaque fois que ListView a été réorganisé, les éléments ont changé d'emplacement dans la liste. Mais le ListView n'était pas seulement rafraîchi, en fait, il y avait une animation des objets se déplaçant vers leurs nouvelles positions.

Cette application était très cool et maintenant c'est exactement ce dont j'ai besoin. Nous prévoyons de faire une live-data-ranking-apps et ce type d'animation serait parfait.

Mais personne dans mon équipe n'a une idée de comment cela peut être fait. Je pense à ObservableCollection et Databinding mais le reste est un mystère total pour moi. Un conseil ou une idée serait d'une grande aide. Je suis sûr que quelqu'un l'a déjà fait. Je l'ai vu de mes propres yeux quand WPF était nouveau mais je ne sais pas par où commencer.

Répondre

4

Il existe également la possibilité de créer un panneau personnalisé. Charlie a à peu près raison en ce qui concerne la disposition prioritaire. Pour créer un panneau personnalisé, vous devez d'abord remplacer les méthodes MeasureOverride et ArrangeOverride héritées de System.Windows.Controls.Panel. Sur CodeProject illustre un couple de panneaux personnalisés dans lesquels vous pouvez étudier comment ils ont été animés. Le FanPanel anime le repositionnement des éléments lorsque l'on passe de la fin d'une rangée au début d'une autre ou vice-versa.

This tutorial montre également des animations de début dans ArrangeOverride.

Je ne l'ai pas essayé, mais vous pouvez également utiliser la valeur de rang avec un ValueConverter personnalisé pour convertir le rang en une position afin de conduire une telle animation dans un Canvas. Un panneau personnalisé serait mieux autonome, cependant, vous permettant de changer le DataTemplate utilisé sur vos données classées et laissez chacun d'eux dire le Panel quelle hauteur ils veulent être (en supposant qu'ils sont disposés verticalement).

+0

Bonne réponse; Je cherchais un tutoriel qui couvrait les remplacements Arrangement et Mesure. – Charlie

1

Je n'ai jamais essayé quelque chose comme ça, mais je soupçonne qu'à tout le moins, vous devrez écrire votre propre ViewBase pour le ListView. Il y a d'excellents exemples de cela here et here. Le vrai problème devient alors, quel événement utilisez-vous pour vos déclencheurs d'animation? Essayez de regarder ItemsControl.ItemsChanged. En fin de compte, vous devrez peut-être hériter de ItemsControl et remplacer plusieurs agencements et organiser les méthodes afin d'obtenir cette fonctionnalité. Même avec les contrôles ultra-personnalisables de WPF, ce n'est pas une tâche facile, et il faudra plus de code-behind que XAML.