Я работаю над проектом, который включает в себя рисование изогнутых путей между двумя объектами. В настоящее время я пишу некоторый тестовый код, чтобы играть с кривыми Безье и анимацией. Первый тест - просто переместить конечную точку (Point3) из исходного объекта (прямоугольник) в объект назначения (другой прямоугольник) по прямой. Вот код, который устанавливает фактическую линию:WPF Animation - Анимированные точки кривой Безье
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);
ОК, так что теперь у нас есть линия разрушилась до точки. Теперь, позволяет анимировать эту линию, переходя от _rect1 к _rect2 (два объекта на концах):
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);
прекрасно работает. Однако, когда я пытаюсь сделать это с помощью раскадровки, я ничего не получаю. Вот раскадрованный код:
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();
Ничего не движется. Я подозреваю, что есть проблема с тем, что я кормлю SetTarget или SetTargetProperty, но не могу понять, как это понять. Кто-нибудь имеет опыт работы с анимацией строк/безье точек в WPF?
Я не уверен, что решит вашу проблему, но вы можете найти вдохновение в этом посте: http://www.japf.fr/?p=227 –