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 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); }
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(); }
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); } } }
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); } } }