private static void DoBlurTansition( IBlurParams blurParams, FrameworkElement target, RoutedEventHandler onLoaded, Visibility?visibility) { var reverse = Transitionz.IsVisibilityHidden(visibility); var blurEffect = new BlurEffect() { Radius = reverse ? blurParams.To : blurParams.From }; target.Effect = blurEffect; if (onLoaded != null && Transitionz.HasFlag(blurParams.TransitionOn, TransitionOn.Once)) { target.Loaded -= onLoaded; } var a = new DoubleAnimation { From = reverse ? blurParams.To : blurParams.From, To = reverse ? blurParams.From : blurParams.To, FillBehavior = blurParams.FillBehavior, BeginTime = TimeSpan.FromMilliseconds(blurParams.BeginTime), Duration = new Duration(TimeSpan.FromMilliseconds(blurParams.Duration)), EasingFunction = reverse ? (blurParams.ReverseEase ?? blurParams.Ease) : blurParams.Ease, AutoReverse = blurParams.AutoReverse, }; // Directly adding RepeatBehavior to constructor breaks existing animations, so only add it if properly defined if (blurParams.RepeatBehavior == RepeatBehavior.Forever || blurParams.RepeatBehavior.HasDuration || (blurParams.RepeatBehavior.HasDuration && blurParams.RepeatBehavior.Count > 0)) { a.RepeatBehavior = blurParams.RepeatBehavior; } if (blurParams.To == 0.0) { a.Completed += (_, __) => target.Effect = null; } if (visibility.HasValue) { a.Completed += (_, __) => target.Visibility = visibility.Value; } a.SetDesiredFrameRate(24); var storyboard = new Storyboard(); storyboard.Children.Add(a); Storyboard.SetTarget(a, ((BlurEffect)target.Effect)); Storyboard.SetTargetProperty(a, new PropertyPath(BlurEffect.RadiusProperty)); FreezeHelper.SetFreeze(storyboard, true); storyboard.Begin(); }
private static void DoTranslateTransition(ITranslateParams transitionParams, FrameworkElement target, RoutedEventHandler onLoaded, Visibility?visibility) { if (onLoaded != null && Transitionz.HasFlag(transitionParams.TransitionOn, TransitionOn.Once)) { target.Loaded -= onLoaded; } var reverse = Transitionz.IsVisibilityHidden(visibility); var translateTransform = new TranslateTransform() { X = reverse ? transitionParams.To.X : transitionParams.From.X, Y = reverse ? transitionParams.To.Y : transitionParams.From.Y, }; target.RenderTransform = translateTransform; var x = new DoubleAnimation { From = reverse ? transitionParams.To.X : transitionParams.From.X, To = reverse ? transitionParams.From.X : transitionParams.To.X, FillBehavior = transitionParams.FillBehavior, BeginTime = TimeSpan.FromMilliseconds(transitionParams.BeginTime), Duration = new Duration(TimeSpan.FromMilliseconds(transitionParams.Duration)), EasingFunction = reverse ? (transitionParams.ReverseEase ?? transitionParams.Ease) : transitionParams.Ease, AutoReverse = transitionParams.AutoReverse, }; var y = new DoubleAnimation { From = reverse ? transitionParams.To.Y : transitionParams.From.Y, To = reverse ? transitionParams.From.Y : transitionParams.To.Y, FillBehavior = transitionParams.FillBehavior, BeginTime = TimeSpan.FromMilliseconds(transitionParams.BeginTime), Duration = new Duration(TimeSpan.FromMilliseconds(transitionParams.Duration)), EasingFunction = reverse ? (transitionParams.ReverseEase ?? transitionParams.Ease) : transitionParams.Ease, AutoReverse = transitionParams.AutoReverse, }; // Directly adding RepeatBehavior to constructor breaks existing animations, so only add it if properly defined if (transitionParams.RepeatBehavior == RepeatBehavior.Forever || transitionParams.RepeatBehavior.HasDuration || (transitionParams.RepeatBehavior.HasDuration && transitionParams.RepeatBehavior.Count > 0)) { x.RepeatBehavior = transitionParams.RepeatBehavior; y.RepeatBehavior = transitionParams.RepeatBehavior; } if (visibility.HasValue) { x.Completed += (_, __) => target.Visibility = visibility.Value; } x.SetDesiredFrameRate(24); y.SetDesiredFrameRate(24); (target.RenderTransform).BeginAnimation(TranslateTransform.XProperty, x); (target.RenderTransform).BeginAnimation(TranslateTransform.YProperty, y); }
private static void DoScaleTansition( IScaleParams scaleParams, FrameworkElement target, RoutedEventHandler onLoaded, Visibility?visibility) { var reverse = Transitionz.IsVisibilityHidden(visibility); var scaleTransform = new ScaleTransform() { ScaleX = reverse ? scaleParams.To.X : scaleParams.From.X, ScaleY = reverse ? scaleParams.To.Y : scaleParams.From.Y }; target.LayoutTransform = scaleTransform; if (onLoaded != null && Transitionz.HasFlag(scaleParams.TransitionOn, TransitionOn.Once)) { target.Loaded -= onLoaded; } if (Math.Abs(scaleParams.From.X - scaleParams.To.X) > 0.001) { var x = new DoubleAnimation { From = reverse ? scaleParams.To.X : scaleParams.From.X, To = reverse ? scaleParams.From.X : scaleParams.To.X, FillBehavior = scaleParams.FillBehavior, BeginTime = TimeSpan.FromMilliseconds(scaleParams.BeginTime), Duration = new Duration(TimeSpan.FromMilliseconds(scaleParams.Duration)), EasingFunction = reverse ? (scaleParams.ReverseEase ?? scaleParams.Ease) : scaleParams.Ease, AutoReverse = scaleParams.AutoReverse, }; x.SetDesiredFrameRate(24); scaleTransform.BeginAnimation(ScaleTransform.ScaleXProperty, x); } if (Math.Abs(scaleParams.From.Y - scaleParams.To.Y) > 0.001) { var y = new DoubleAnimation { From = reverse ? scaleParams.To.Y : scaleParams.From.Y, To = reverse ? scaleParams.From.Y : scaleParams.To.Y, FillBehavior = scaleParams.FillBehavior, BeginTime = TimeSpan.FromMilliseconds(scaleParams.BeginTime), Duration = new Duration(TimeSpan.FromMilliseconds(scaleParams.Duration)), EasingFunction = reverse ? (scaleParams.ReverseEase ?? scaleParams.Ease) : scaleParams.Ease, AutoReverse = scaleParams.AutoReverse, }; y.SetDesiredFrameRate(24); scaleTransform.BeginAnimation(ScaleTransform.ScaleYProperty, y); } }
private static void DoOpacityTransition( IOpacityParams transitionParams, FrameworkElement target, RoutedEventHandler onLoaded, Visibility?visibility) { var reverse = Transitionz.IsVisibilityHidden(visibility); target.Opacity = reverse ? transitionParams.To : transitionParams.From; if (onLoaded != null && Transitionz.HasFlag(transitionParams.TransitionOn, TransitionOn.Once)) { target.Loaded -= onLoaded; } var a = new DoubleAnimation { From = reverse ? transitionParams.To : transitionParams.From, To = reverse ? transitionParams.From : transitionParams.To, FillBehavior = transitionParams.FillBehavior, BeginTime = TimeSpan.FromMilliseconds(transitionParams.BeginTime), Duration = new Duration(TimeSpan.FromMilliseconds(transitionParams.Duration)), EasingFunction = reverse ? (transitionParams.ReverseEase ?? transitionParams.Ease) : transitionParams.Ease, AutoReverse = transitionParams.AutoReverse, }; // Directly adding RepeatBehavior to constructor breaks existing animations, so only add it if properly defined if (transitionParams.RepeatBehavior == RepeatBehavior.Forever || transitionParams.RepeatBehavior.HasDuration || (transitionParams.RepeatBehavior.HasDuration && transitionParams.RepeatBehavior.Count > 0)) { a.RepeatBehavior = transitionParams.RepeatBehavior; } a.SetDesiredFrameRate(24); var storyboard = new Storyboard(); storyboard.Children.Add(a); Storyboard.SetTarget(a, target); Storyboard.SetTargetProperty(a, new PropertyPath(UIElement.OpacityProperty)); a.Completed += (_, __) => { if (visibility.HasValue) { target.Visibility = visibility.Value; } target.Opacity = reverse ? transitionParams.From : transitionParams.To; storyboard.Stop(); }; storyboard.Begin(); }