Je travaille sur un projet qui consiste à tracer des trajectoires courbes entre deux objets. Actuellement, j'ai écrit un code de test pour jouer avec les courbes de Bézier et l'animation. Le premier test consiste simplement à déplacer le point final (Point3) de l'objet d'origine (un rectangle) vers l'objet de destination (un autre rectangle), en ligne droite. voici le code qui met en place la ligne réelle:Animation WPF - Animation de points de courbe de Bézier
connector = new Path();
connector.Stroke = Brushes.Red;
connector.StrokeThickness = 3;
PathGeometry connectorGeometry = new PathGeometry();
PathFigure connectorPoints = new PathFigure();
connectorCurve = new BezierSegment();
connectorPoints.StartPoint = new Point((double)_rect1.GetValue(Canvas.LeftProperty) + _rect1.Width/2,
(double)_rect1.GetValue(Canvas.TopProperty) + _rect1.Height/2);
connectorCurve.Point1 = connectorPoints.StartPoint;
connectorCurve.Point2 = connectorPoints.StartPoint;
connectorCurve.Point3 = connectorPoints.StartPoint;
connectorPoints.Segments.Add(connectorCurve);
connectorGeometry.Figures.Add(connectorPoints);
connector.Data = connectorGeometry;
MainCanvas.Children.Add(connector);
OK, donc nous avons maintenant une ligne effondrée à un point. Maintenant, cette ligne prend vie, allant de _rect1 à _rect2 (les deux objets aux points d'extrémité):
PointAnimation pointAnim = new PointAnimation();
pointAnim.From = connectorCurve.Point3;
pointAnim.To = new Point((double)_rect2.GetValue(Canvas.LeftProperty) + _rect2.Width/2,
(double)_rect2.GetValue(Canvas.TopProperty) + _rect2.Height/2);
pointAnim.Duration = new Duration(TimeSpan.FromSeconds(5));
board.Children.Add(pointAnim);
fonctionne à merveille. Cependant, quand j'essaye de le faire avec un storyboard, je n'ai rien. Voici le code du storyboard:
Storyboard board = new Storyboard();
PointAnimation pointAnim = new PointAnimation();
pointAnim.From = connectorCurve.Point3;
pointAnim.To = new Point((double)_rect2.GetValue(Canvas.LeftProperty) + _rect2.Width/2,
(double)_rect2.GetValue(Canvas.TopProperty) + _rect2.Height/2);
pointAnim.Duration = new Duration(TimeSpan.FromSeconds(5));
Storyboard.SetTarget(pointAnim, connectorCurve);
Storyboard.SetTargetProperty(pointAnim, new PropertyPath(BezierSegment.Point3Property));
board.Children.Add(pointAnim);
board.Begin();
Rien ne bouge. Je soupçonne qu'il y a un problème avec ce que je nourris SetTarget ou SetTargetProperty, mais je n'arrive pas à le comprendre. Est-ce que quelqu'un a de l'expérience avec l'animation de points de ligne/Bézier dans WPF?
Je ne suis pas sûr que cela puisse résoudre votre problème, mais vous pouvez trouver de l'inspiration dans ce post: http://www.japf.fr/?p=227 –