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();
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
        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();
        }