public static Task <FrameworkElement> AnimateAsync(this FrameworkElement element, IEnumerable <Timeline> animations, AnimationParameters animationParameters = null)
        {
            var  tcs = new TaskCompletionSource <FrameworkElement>();
            var  sb  = AnimationManager.AnimationStoryboard(element, animations, animationParameters, () => tcs.SetResult(element));
            Task t   = AnimationManager.SplashScreenGone();

#if NETFX_CORE || WINDOWS_81_PORTABLE
            t.ContinueWith(x => element.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, sb.Begin));
#endif
#if WINDOWS_PHONE
            t.ContinueWith(x => element.Dispatcher.BeginInvoke(sb.Begin));
#endif
            return(tcs.Task);
        }
        public async static Task <FrameworkElement> SkewToAsync(this FrameworkElement element,
                                                                double seconds, Point skew, EasingFunctionBase easingFunction = null, AnimationParameters animationParameters = null)
        {
            if (seconds > 0)
            {
                return(await AnimateAsync(element, SkewToAnimation(element, seconds, skew, easingFunction), animationParameters));
            }

            AnimationManager.PrepareElement(element);
            var transform = element.RenderTransform as CompositeTransform;

            if (transform == null)
            {
                return(element);
            }

            transform.SkewX = skew.X;
            transform.SkewY = skew.Y;
            return(element);
        }
 public static Storyboard SkewToStoryboard(this FrameworkElement element,
                                           double seconds, Point skew, EasingFunctionBase easingFunction = null,
                                           AnimationParameters animationParameters = null, Action completedAction = null)
 {
     return(AnimationManager.AnimationStoryboard(element, SkewToAnimation(element, seconds, skew, easingFunction), animationParameters, completedAction));
 }
        public static async Task <FrameworkElement> MoveToAsync(this FrameworkElement element,
                                                                double seconds, Point point, EasingFunctionBase easingFunction = null, AnimationParameters animationParameters = null)
        {
            if (seconds > 0.0)
            {
                return(await AnimateAsync(element, MoveToAnimation(element, seconds, point, easingFunction), animationParameters));
            }

            AnimationManager.PrepareElement(element);
            var transform = element.RenderTransform as CompositeTransform;

            if (transform == null)
            {
                return(element);
            }

            transform.TranslateX = point.X;
            transform.TranslateY = point.Y;
            return(element);
        }
        public static async Task <FrameworkElement> RotateAsync(this FrameworkElement element,
                                                                double seconds, double rotation, EasingFunctionBase easingFunction = null, AnimationParameters animationParameters = null)
        {
            if (!(seconds <= 0))
            {
                return(await AnimateAsync(element, RotateAnimation(element, seconds, rotation, easingFunction), animationParameters));
            }

            AnimationManager.PrepareElement(element);
            var transform = element.RenderTransform as CompositeTransform;

            if (transform == null)
            {
                return(element);
            }

            transform.Rotation = rotation;
            return(element);
        }
        public static Storyboard AnimationStoryboard(
            FrameworkElement element, 
            IEnumerable<Timeline> animations, 
            AnimationParameters animationParameters = null, 
            Action completedAction = null)
        {
            PrepareElement(element);

            var sb = new Storyboard();
            foreach (var animation in animations)
            {
                Storyboard.SetTarget(animation, element);
                sb.Children.Add(animation);
            }

            sb.Completed += (sender, o) =>
            {
                Manager.RemoveStoryboard(element, sb);
                if (completedAction != null)
                    completedAction();
            };

            Manager.AddStoryboard(element, sb);

            if (animationParameters != null)
            {
                if (animationParameters.SpeedRatio > 0.0)
                    sb.SpeedRatio = animationParameters.SpeedRatio;
                if (animationParameters.RepeatCount > 0)
                    sb.RepeatBehavior = new RepeatBehavior(animationParameters.RepeatCount);
                if (animationParameters.RepeatDuration > 0)
                    sb.RepeatBehavior = new RepeatBehavior(TimeSpan.FromSeconds(animationParameters.RepeatDuration));
                if (animationParameters.Forever)
                    sb.RepeatBehavior = RepeatBehavior.Forever;
                sb.AutoReverse = animationParameters.AutoReverse;

                if (animationParameters.OpacityFromZero)
                    element.Opacity = 0;

                if (animationParameters.Delay > 0)
                    sb.BeginTime = TimeSpan.FromSeconds(animationParameters.Delay);
            }

            return sb;
        }