WPF TranslateTransform - PullRequest
       18

WPF TranslateTransform

2 голосов
/ 30 июля 2011

Я пытаюсь использовать класс TranslateTransform для перемещения изображения в сетке по оси Y.Мне нужно, чтобы это движение было плавным, поэтому я не могу использовать SetMargin или SetCanvas.Я пытаюсь сделать это в следующем коде:

public void MoveTo(Image target, double oldY, double newY)
{
    var trans = new TranslateTransform();
    var anim2 = new DoubleAnimation(0, newY, TimeSpan.FromSeconds(2))
                    {EasingFunction = new SineEase()};
    target.RenderTransform = trans;
    trans.BeginAnimation(TranslateTransform.YProperty, anim2);
}

Объект, который я хочу использовать (элемент управления изображением), помещен в сетку.В первый раз все отлично работает.Проблемы возникают, когда я пытаюсь переместить объект снова, используя ту же функцию.Объект (элемент управления Image) сначала перемещается в начальную позицию (начальную координату Y), а затем начинается анимация.

Разве TranslateTransform не может изменить координаты (в моем случае свойство Margin)?

Спасибо.

Ответы [ 4 ]

1 голос
/ 30 июля 2011

Преобразование не изменяет исходные значения. Они являются вашей отправной точкой. Если вы хотите новую точку отправления при каждом перемещении, вы можете обработать событие завершения анимации. Или из вашего преобразования вы можете получить текущее смещение и сделать его новой начальной точкой для анимации.

Другими словами, ваши начальные значения всегда будут вашим последним переходом к значениям

0 голосов
/ 18 июля 2013

Вы должны использовать свойство By DoubleAnimation.Попробуйте это:

//everytime you execute this anmation your object will be moved 2.0 further
double offset = 2.0 
var anim2 = new DoubleAnimation(newY, TimeSpan.FromSeconds(2));
anim2.To = null;
anim2.By = offset;
0 голосов
/ 03 ноября 2012

Вы явно указали, что анимация начинается с 0. Она делает то, что говорила. Просто уберите явный ноль fromvalue и все будет работать.

var anim2 = new DoubleAnimation(newY, TimeSpan.FromSeconds(2)) 
                { EasingFunction = new SineEase() };
0 голосов
/ 30 июля 2011

TranslateTransform - это особый вид преобразования рендера.Скорее, изменяя свойства элемента управления (например, свойство Margin), он просто влияет на способ отображения элемента управления на экране.

...