You may use Storyboard to chain animations:
static IEnumerable<DoubleAnimation> MoveTo(Control target, double origX, double origY, double newX, double newY)
{
TranslateTransform trans = new TranslateTransform();
target.RenderTransform = trans;
var a = new DoubleAnimation(origX, newY, TimeSpan.FromSeconds(2));
Storyboard.SetTargetProperty(a, new PropertyPath("(Canvas.Top)"));
var b = new DoubleAnimation(origY, newX, TimeSpan.FromSeconds(2));
Storyboard.SetTargetProperty(b, new PropertyPath("(Canvas.Left)"));
yield return a;
yield return b;
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Control c = sender as Control;
var top = Canvas.GetTop(c);
var left = Canvas.GetLeft(c);
Storyboard sb = new Storyboard();
foreach (var ab in MoveTo(c, left, top, 250, 250))
sb.Children.Add(ab);
foreach (var ab in MoveTo(c, 250, 250, 50, 50))
{
ab.BeginTime = TimeSpan.FromSeconds(5);
sb.Children.Add(ab);
}
(sender as Control).BeginStoryboard(sb);
}
Regards
Joseph Leung