DoubleAnimation не обновляет Canvas.TopProperty/LeftProperty

У меня есть карта, представленная на холсте.

На этой карте показаны некоторые города, свойства которых сверху и слева хранятся в свойствах 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);
    }
  • Представление var - это эллипс, представляющий фактический объект, который я хочу переместить в "цель" города
  • Первый Debug.WriteLine показывает исходную позицию эллипса. Второй, вызванный завершением animY DoubleAnimation, IMHO, пытается показать новую позицию эллипса после анимации.

Моя проблема в том, что даже если мой Ellipse движется по холсту (я вижу, что он движется в представлении холста), два Debug.WriteLine показывают точно такие же значения, исходные, но не новые свойства Left и Top, которые должны имеет после анимации.

Как я могу обновить это свойство или получить фактическое положение эллипса вместо исходного?

0 ответов

Другие вопросы по тегам