Animer une colonne de grille ou une ligne de grille dans XAML?
Est il possible que je peux animer la Grille de la largeur de la colonne ou de la ligne de la Grille de hauteur à partir de XAML?
source d'informationauteur Kishore Kumar | 2010-07-05
Vous devez vous connecter pour publier un commentaire.
La
ColumnDefinition.Width
etRowDefinition.Height
propriétés sont de typeGridLength
et il n'est pas intégré dans les animations de ce type. Donc, si vous voulez le faire, vous devrez probablement créer votre propreGridLengthAnimation
classe. Ce n'est probablement pas trop impossible si vous prenezDoubleAnimation
comme un exemple, mais pas facile non plus...EDIT: en fait, il y a plusieurs résultats intéressants si vous recherchez "GridLength animation" sur Google...
http://windowsclient.net/learn/video.aspx?v=70654
http://marlongrech.wordpress.com/2007/08/20/gridlength-animation/
http://www.codeproject.com/KB/WPF/GridLengthAnimation.aspx
Comment sur un travail autour? Pourquoi ne pas placer une grille(ou n'importe quel autre contrôle) à l'intérieur de la ligne particulière que vous souhaitez animer, de définir la ligne de hauteur à "Auto", puis d'animer la hauteur du contrôle. Il a travaillé pour moi.
Code derrière:
Je reconnais son pas ce que vous cherchez. Mais son une solution rapide(en Supposant bien sûr qu'en fin de compte, vous voulez que le UIElement placé à l'intérieur de la grille animé par l'animation de la ligne de grille). Vous pouvez même le faire pour la largeur de la colonne.
Je suis fatigué d'avoir à jouer avec XAML pour animer grille de lignes et de colonnes il y a un moment j'ai donc écrit un couple de méthodes pour le faire totalement de code.
Avec ces derniers vous pouvez agrandir/rétrécir les colonnes et les lignes de code avec une seule ligne:
Une chose importante à noter est le réglage de l'animation à la valeur null à la fin. Si vous ne le faites pas, la grille est toujours sous contrôle de l'animation lorsque l'animation est terminée. Ce pourrait être bien si la grille n'ont pas de diviseur, mais si la grille a un séparateur et vous voulez être en mesure de redimensionner manuellement une fois l'animation terminée, alors vous devez définir l'animation à null après qu'il accomplit.
Ici sont les méthodes:
J'ai construit sur la
AnimationHelper
classe fournie par Nigel Shaw et l'enveloppa dans une réutilisablesGridAnimationBehavior
qui peut être attaché à laRowDefinition
etColumnDefinition
éléments.Remarque que j'ai modifié Nigel code un peu pour utiliser un paramètre de type TimeSpan pour l'animation de la durée au lieu de séparer les secondes et les millisecondes paramètres.
Ce comportement rend l'animation de la grille de lignes/colonnes MVVM amical (XAML, pas de code derrière nécessaire). Exemple:
J'ai ajouté cette réponse parce que l'affiche originale a demandé un pur XAML solution.
La MahApps.Métro bibliothèque a un bouton pour cela. La source peut être trouvé ici.