0

我有一张由 Canvas 表示的地图。

这张地图显示了一些城市,它们的 Top 和 Left 属性存储在 City.Y 和 City.X 属性中

现在我正试图将一个对象从一个城市移动到另一个城市。我有这个方法:

private void UpdateUI(City target)
    {
        var top = Canvas.GetTop(Representation);
        var left = Canvas.GetLeft(Representation);
        Debug.WriteLine("top : " + Canvas.GetTop(Representation) + ", left : " + Canvas.GetLeft(Representation));
        int velocity = 2000;
        TranslateTransform trans = new TranslateTransform();
        Representation.RenderTransform = trans;
        DoubleAnimation animY = new DoubleAnimation(0, target.Y - top, TimeSpan.FromMilliseconds(velocity));
        DoubleAnimation animX = new DoubleAnimation(0, target.X - left, TimeSpan.FromMilliseconds(velocity));
        animY.Completed += (o, e) => Debug.WriteLine("top : " + Canvas.GetTop(Representation) + ", left : " + Canvas.GetLeft(Representation));
        trans.BeginAnimation(TranslateTransform.YProperty, animY);
        trans.BeginAnimation(TranslateTransform.XProperty, animX);
    }
  • Representation var 是一个 Ellipse,表示我想要移动到 City“目标”的实际对象
  • 第一个 Debug.WriteLine 显示椭圆的原始位置。第二个,由 animY DoubleAnimation 的完成调用,恕我直言,试图在动画之后显示 Ellipse 的新位置。

我的问题是即使我的 Ellipse 在 Canvas 上移动(我看到它在 Canvas 的表示中移动),两个 Debug.WriteLine 显示完全相同的值,原始值但不是它应该的新 Left 和 Top 属性有动画之后。

如何更新此属性或获取 Ellipse 的实际位置而不是原始位置?

4

0 回答 0