oclockvn
10/26/2015 - 7:25 AM

AnimationHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Animation;

namespace WpfApplication1
{
    public class AnimationHelper
    {
        static void TranslateAnimation(DependencyObject root, FrameworkElement element, double offset, bool vertical = false)
        {
            NameScope.GetNameScope(root).RegisterName(element.Name, element);

            var translated = element.RenderTransform as TranslateTransform;

            if (!element.RenderTransform.HasAnimatedProperties)
            {
                var translate = new TranslateTransform();
                element.RenderTransform = translate;
            }

            var storyboard = new Storyboard();
            var animation = new DoubleAnimation();

            /*
            if (offset == 0)
            {   
                // animation.From = translated.X;
            }
            */

            animation.To = offset;
            animation.Duration = new Duration(TimeSpan.FromSeconds(1));

            var ease = new BackEase();
            ease.EasingMode = EasingMode.EaseInOut;
            ease.Amplitude = 1;
            animation.EasingFunction = ease;
            PropertyPath path;

            if (vertical)
            {
                path = new PropertyPath("(RenderTransform).(TranslateTransform.Y)");
            }
            else
            {
                path = new PropertyPath("(RenderTransform).(TranslateTransform.X)");
            }

            Storyboard.SetTargetProperty(animation, path);

            storyboard.Children.Add(animation);

            element.BeginStoryboard(storyboard);
        }
    }
}