如何在WPF中获得移动形状的新位置

本文关键字:新位置 位置 移动 WPF | 更新日期: 2023-09-27 17:51:26

我在程序启动几秒钟后创建了一些省略号像这样Ellipse myEllipse = new Ellipse();然后我像这样移动省略号

public void MoveTo(Shape target, double newX, double newY, double oldX, double oldY)
        {
            TranslateTransform trans = new TranslateTransform();
            target.RenderTransform = trans;
            DoubleAnimation anim1 = new DoubleAnimation(0, newY - oldY, TimeSpan.FromSeconds(5));
            DoubleAnimation anim2 = new DoubleAnimation(0, newX - oldX, TimeSpan.FromSeconds(5));
            trans.BeginAnimation(TranslateTransform.YProperty, anim1);
            trans.BeginAnimation(TranslateTransform.XProperty, anim2);
        }

当它们移动到新位置时我想获得它们新的X和Y位置在移动时,我使用计时器在我想要的时间获得它们的X和Y但是当我使用Canvas.GetLeft(name)时它返回Nan而我使用Point p = mEllipse.TranslatePoint(new Point(0, 0), canvasName);时它返回椭圆的初始位置而不是新的位置

如何在WPF中获得移动形状的新位置

如果你像这样对Canvas.LeftCanvas.Top属性进行动画化,你总是可以通过调用Canvas.GetLeftCanvas.GetTop来获得Canvas子元素的当前位置:

public static void MoveTo(UIElement target, double x, double y)
{
    var duration = TimeSpan.FromSeconds(5);
    target.BeginAnimation(Canvas.LeftProperty, new DoubleAnimation(x, duration));
    target.BeginAnimation(Canvas.TopProperty, new DoubleAnimation(y, duration));
}

注意,您还必须为Canvas.LeftCanvas.Top属性设置初始值,如

Canvas.SetLeft(myEllipse, 0);
Canvas.SetTop(myEllipse, 0);