public static AnimationClock AnimatePenner(
            DependencyObject element,
            DependencyProperty prop,
            PennerDoubleAnimation.Equations type,
            double?from,
            double to,
            int durationMS,
            EventHandler callbackFunc)
        {
            double defaultValue = double.IsNaN((double)element?.GetValue(prop)) ? 0.0 : (double)element.GetValue(prop);
            PennerDoubleAnimation pennerDoubleAnimation = new PennerDoubleAnimation(type, from.GetValueOrDefault(defaultValue), to);

            return(Animator.Animate(element, prop, (AnimationTimeline)pennerDoubleAnimation, durationMS, new double?(), new double?(), callbackFunc));
        }
 public static double BounceEaseInOut(double t, double b, double c, double d)
 {
     return(t < d / 2.0 ? PennerDoubleAnimation.BounceEaseIn(t * 2.0, 0.0, c, d) * 0.5 + b : PennerDoubleAnimation.BounceEaseOut(t * 2.0 - d, 0.0, c, d) * 0.5 + c * 0.5 + b);
 }
 public static double ExpoEaseOutIn(double t, double b, double c, double d)
 {
     return(t < d / 2.0 ? PennerDoubleAnimation.ExpoEaseOut(t * 2.0, b, c / 2.0, d) : PennerDoubleAnimation.ExpoEaseIn(t * 2.0 - d, b + c / 2.0, c / 2.0, d));
 }
 public static double BounceEaseIn(double t, double b, double c, double d)
 {
     return(c - PennerDoubleAnimation.BounceEaseOut(d - t, 0.0, c, d) + b);
 }