Estoy trabajando en un proyecto que implica dibujar trazados curvos entre dos objetos. Actualmente, he estado escribiendo algunos códigos de prueba para jugar con curvas y animaciones Bezier. La primera prueba es simplemente mover el punto final (Punto3) del objeto de origen (un rectángulo) al objeto de destino (otro rectángulo), en línea recta. Aquí está el código que establece la línea real:Animación WPF - Animación de los puntos de la curva de Bezier
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, así que ahora tenemos una línea se derrumbó a un punto. Ahora, vamos a animar esa línea, al pasar de _rect1 a _rect2 (los dos objetos en los puntos finales):
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);
funciona de maravilla. Sin embargo, cuando trato de hacerlo con un guión gráfico, no obtengo nada. Aquí está el código 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();
Nada se mueve. Sospecho que hay un problema con lo que estoy alimentando SetTarget o SetTargetProperty, pero parece que no puede resolverlo. ¿Alguien tiene experiencia con la animación de puntos de línea/bezier en WPF?
No estoy seguro de que esto resuelva su problema, pero puede encontrar algo de inspiración en esta publicación: http://www.japf.fr/?p=227 –