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); }
public static void SetTranslate(UIElement element, ITranslateParams value) { element.SetValue(TranslateProperty, value); }