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);
        }
        private static void OnVisibilityChangedForTranslate(object sender, EventArgs e)
        {
            var element    = ((FrameworkElement)((PropertyChangeNotifier)sender).PropertySource);
            var visibility = Transitionz.GetVisibility(element);

            if (visibility == Visibility.Visible)
            {
                element.Visibility = Visibility.Visible;
            }
            element.BeginInvoke(new Action(() => DoTranslateTransition(GetTranslate(element), element, null, visibility)), DispatchPriority.DataBind);
        }
        private static void OnVisibilityChangedForBlur(object sender, EventArgs e)
        {
            var element    = ((FrameworkElement)((PropertyChangeNotifier)sender).PropertySource);
            var visibility = Transitionz.GetVisibility(element);

            if (visibility == Visibility.Visible)
            {
                element.Visibility = Visibility.Visible;
            }
            DoBlurTansition(GetBlur(element), element, null, visibility);
        }
Exemple #5
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 #6
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();
        }
        private void UpdateTransition()
        {
            if (backgroundElement == null)
            {
                return;
            }

            Transitionz.SetOpacity(backgroundElement, new OpacityParams()
            {
                BeginTime    = 0,
                Duration     = Duration,
                Ease         = Easing,
                From         = FromOpacity,
                To           = ToOpacity,
                TransitionOn = TransitionOn.DataContextChanged | TransitionOn.Once
            });
        }
        private static void OnTranslateParamsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var oldTransitionParams = e.OldValue as ITranslateParams;
            var newTransitionParams = e.NewValue as ITranslateParams;
            var target = d as FrameworkElement;

            if (target == null)
            {
                return;
            }

            if (oldTransitionParams != null)
            {
                target.Loaded             -= OnLoadedForTranslate;
                target.DataContextChanged -= OnDataContextChangedForTranslate;
                Transitionz.RemoveVisibilityChangedHandler(target, OnVisibilityChangedForTranslate);
            }

            if (newTransitionParams != null)
            {
                var translateTransform = new TranslateTransform()
                {
                    X = newTransitionParams.From.X, Y = newTransitionParams.From.Y
                };
                target.RenderTransform = translateTransform;
                if (Transitionz.HasFlag(newTransitionParams.TransitionOn, TransitionOn.Loaded) || Transitionz.HasFlag(newTransitionParams.TransitionOn, TransitionOn.Once))
                {
                    target.Loaded += OnLoadedForTranslate;
                    if (target.IsLoaded())
                    {
                        OnLoadedForTranslate(target, null);
                    }
                }
                if (Transitionz.HasFlag(newTransitionParams.TransitionOn, TransitionOn.DataContextChanged))
                {
                    target.DataContextChanged += OnDataContextChangedForTranslate;
                }
                if (Transitionz.HasFlag(newTransitionParams.TransitionOn, TransitionOn.Visibility))
                {
                    Transitionz.AddVisibilityChangedHandler(target, OnVisibilityChangedForTranslate);
                }
            }
        }
Exemple #9
0
        private static void OnLayoutScaleParamsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var oldTransitionParams = e.OldValue as IScaleParams;
            var newTransitionParams = e.NewValue as IScaleParams;
            var target = d as FrameworkElement;

            if (target == null)
            {
                return;
            }

            if (oldTransitionParams != null)
            {
                target.Loaded             -= Transitionz.OnLoadedForScale;
                target.DataContextChanged -= Transitionz.OnDataContextChangedForScale;
            }

            if (newTransitionParams != null)
            {
                if (Transitionz.HasFlag(newTransitionParams.TransitionOn, TransitionOn.Loaded))
                {
                    target.Loaded += OnLoadedForScale;
                    if (target.IsLoaded())
                    {
                        OnLoadedForScale(target, null);
                    }
                }

                if (Transitionz.HasFlag(newTransitionParams.TransitionOn, TransitionOn.DataContextChanged))
                {
                    target.DataContextChanged += OnDataContextChangedForScale;
                }

                if (Transitionz.HasFlag(newTransitionParams.TransitionOn, TransitionOn.Visibility))
                {
                    Transitionz.AddVisibilityChangedHandler(target, OnVisibilityChangedForScale);
                }
            }
        }
        private static void OnOpacityChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var oldTransitionParams = e.OldValue as IOpacityParams;
            var newTransitionParams = e.NewValue as IOpacityParams;
            var target = d as FrameworkElement;

            if (target == null)
            {
                return;
            }

            if (oldTransitionParams != null)
            {
                target.Loaded             -= OnLoadedForOpacity;
                target.DataContextChanged -= OnDataContextChangedForOpacity;
                Transitionz.RemoveVisibilityChangedHandler(target, OnVisibilityChangedForOpacity);
            }

            if (newTransitionParams != null)
            {
                if (Transitionz.HasFlag(newTransitionParams.TransitionOn, TransitionOn.Loaded) || Transitionz.HasFlag(newTransitionParams.TransitionOn, TransitionOn.Once))
                {
                    target.Opacity = newTransitionParams.From;
                    target.Loaded += OnLoadedForOpacity;
                    if (target.IsLoaded())
                    {
                        OnLoadedForOpacity(target, null);
                    }
                }
                if (Transitionz.HasFlag(newTransitionParams.TransitionOn, TransitionOn.DataContextChanged))
                {
                    target.DataContextChanged += OnDataContextChangedForOpacity;
                }
                if (Transitionz.HasFlag(newTransitionParams.TransitionOn, TransitionOn.Visibility))
                {
                    Transitionz.AddVisibilityChangedHandler(target, OnVisibilityChangedForOpacity);
                }
            }
        }