doubleAnimation在C#中完成后如何正确控制翻译转换位置

时间:2019-05-22 03:29:02

标签: c# wpf animation

我使用以下代码在画布中间中有一个椭圆形

<select>

我想为椭圆制作动画,使其从左向后回到中心(从中点开始)。

我将坐标var FixedCircle = new Ellipse { Width = 25, Height = 25, Stroke = color, Fill = color, StrokeThickness = 3 }; var centerX = ActualWidth / 2; var centerY = ActualHeight / 2; FixedCircle.Margin = new Thickness(centerX, centerY, 1, 1); Children.Add(FixedCircle); InvalidateVisual(); (centerX,centerY)设置为起点和终点,同时我也在使用线

(0,centerY)

表示必须将transform设置为pointg,我尝试删除它,但是运动变得更糟,从botton开始,或者坐标Point oldPoint = FixedCircle.TransformToAncestor(this).Transform(new Point(centerX,centerY)); Point newPoint = FixedCircle.TransformToAncestor(this).Transform(new Point(0,centerY)); 被视为中间位置,而不是(0,0)我不要。

(ActualWidth / 2, ActualHeight / 2)

我得到的效果是椭圆正确地从中间偏左

enter image description here

然后出现我的问题问题从中间开始,然后向右,当我需要椭圆从从左到中间时,不是从右到右

enter image description here

我想念什么?

1 个答案:

答案 0 :(得分:1)

以下代码从中间到左和向后运行重复的动画。它使用带有EllipseGeometry的路径,因为该路径居中(而不是像Ellipse那样对齐顶部/左侧)。它也不会绘制笔触,只是将笔触的粗细添加到椭圆的半径上。

var transform = new TranslateTransform(canvas.ActualWidth / 2, canvas.ActualHeight / 2);

var radius = 14;

var circle = new Path
{
    Data = new EllipseGeometry(new Point(), radius, radius),
    Fill = Brushes.White,
    RenderTransform = transform
};

canvas.Children.Add(circle);

var animation = new DoubleAnimation
{
    To = radius,
    Duration = TimeSpan.FromSeconds(3),
    AutoReverse = true,
    RepeatBehavior = RepeatBehavior.Forever
};

transform.BeginAnimation(TranslateTransform.XProperty, animation);

对于从中心点开始的从右到左和向后的重复动画,请使用负的BeginTime:

var transform = new TranslateTransform(
    canvas.ActualWidth - radius, canvas.ActualHeight / 2);

var animation = new DoubleAnimation
{
    To = radius,
    Duration = TimeSpan.FromSeconds(6),
    AutoReverse = true,
    RepeatBehavior = RepeatBehavior.Forever,
    BeginTime = TimeSpan.FromSeconds(-3)
};