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(); }
public static void SetBlur(DependencyObject element, IBlurParams value) { element.SetValue(BlurProperty, value); }