Wpf 指定BeginAnimation中UIElement的DependencyProperty

Wpf 指定BeginAnimation中UIElement的DependencyProperty,wpf,animation,render,dependency-properties,Wpf,Animation,Render,Dependency Properties,我正在尝试设置一个椭圆的动画,以便在画布上从点a移动到点B public void AnimateSensor(double x, double y, Ellipse sensor) { if (!Double.IsNaN(x)) { DoubleAnimation animX = new DoubleAnimation(); animX.To = x; animX.Duration

我正在尝试设置一个椭圆的动画,以便在画布上从点a移动到点B

public void AnimateSensor(double x, double y, Ellipse sensor)
    {
        if (!Double.IsNaN(x))
        {
            DoubleAnimation animX = new DoubleAnimation();
            animX.To = x;
            animX.Duration = new Duration(TimeSpan.FromMilliseconds(1000));
            DoubleAnimation animY = new DoubleAnimation();
            animY.To = y;
            animY.Duration = new Duration(TimeSpan.FromMilliseconds(1000));
            TranslateTransform rt = new TranslateTransform();
            sensor.RenderTransform = rt;

            rt.BeginAnimation(sensor.GetValue(Canvas.TopProperty), animX);
            rt.BeginAnimation(sensor.GetValue(Canvas.LeftProperty), animY);
           }
        else
            Console.WriteLine("x or y is NaN");
    }

我用一组坐标和一个椭圆调用这个方法,但是我似乎不知道如何在BeginAnimation中指定dependecy值。我尝试使用“sensor.GetValue(Canvas.LeftProperty)”,但它说它是一个对象,需要依赖属性。当我使用'as DependencyProperty'时,它使其为空,当我尝试转换它时,它说您不能从double转换为DependencyProperty

您可以为椭圆的
Canvas.Left
Canvas.Top
属性设置动画,而不使用TranslateTransform,如下所示:

sensor.BeginAnimation(Canvas.LeftProperty, animX);
sensor.BeginAnimation(Canvas.TopProperty, animY);
if (!(sensor.RenderTransform is TranslateTransform))
{
    // assign RenderTransform only once
    sensor.RenderTransform = new TranslateTransform();
}

var transform = (TranslateTransform)sensor.RenderTransform;
transform.BeginAnimation(TranslateTransform.XProperty, animX);
transform.BeginAnimation(TranslateTransform.YProperty, animY);
或者TranslateTransform的
X
Y
属性,如下所示:

sensor.BeginAnimation(Canvas.LeftProperty, animX);
sensor.BeginAnimation(Canvas.TopProperty, animY);
if (!(sensor.RenderTransform is TranslateTransform))
{
    // assign RenderTransform only once
    sensor.RenderTransform = new TranslateTransform();
}

var transform = (TranslateTransform)sensor.RenderTransform;
transform.BeginAnimation(TranslateTransform.XProperty, animX);
transform.BeginAnimation(TranslateTransform.YProperty, animY);