public void Wipe(TransitionerSlide fromSlide, TransitionerSlide toSlide, Point origin, IZIndexController zIndexController) { if (fromSlide == null) { throw new ArgumentNullException(nameof(fromSlide)); } if (toSlide == null) { throw new ArgumentNullException(nameof(toSlide)); } if (zIndexController == null) { throw new ArgumentNullException(nameof(zIndexController)); } // Set up time points var zeroKeyTime = KeyTime.FromTimeSpan(TimeSpan.Zero); var endKeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(Duration.TotalSeconds / 2)); // From var fromAnimation = new DoubleAnimationUsingKeyFrames(); fromAnimation.KeyFrames.Add(new LinearDoubleKeyFrame(1, zeroKeyTime)); fromAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(0, endKeyTime, _sineEase)); // To var toAnimation = new DoubleAnimationUsingKeyFrames(); toAnimation.KeyFrames.Add(new LinearDoubleKeyFrame(0, zeroKeyTime)); toAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(1, endKeyTime, _sineEase)); // Preset fromSlide.Opacity = 1; toSlide.Opacity = 0; // Set up events toAnimation.Completed += (sender, args) => { toSlide.BeginAnimation(UIElement.OpacityProperty, null); fromSlide.Opacity = 0; toSlide.Opacity = 1; }; fromAnimation.Completed += (sender, args) => { fromSlide.BeginAnimation(UIElement.OpacityProperty, null); fromSlide.Opacity = 0; toSlide.BeginAnimation(UIElement.OpacityProperty, toAnimation); }; // Animate fromSlide.BeginAnimation(UIElement.OpacityProperty, fromAnimation); zIndexController.Stack(toSlide, fromSlide); }
public void Wipe(TransitionerSlide fromSlide, TransitionerSlide toSlide, Point origin, IZIndexController zIndexController) { if (fromSlide == null) { throw new ArgumentNullException(nameof(fromSlide)); } if (toSlide == null) { throw new ArgumentNullException(nameof(toSlide)); } if (zIndexController == null) { throw new ArgumentNullException(nameof(zIndexController)); } var zeroKeyTime = KeyTime.FromTimeSpan(TimeSpan.Zero); var midishKeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(200)); var endKeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(400)); //back out old slide setup var scaleTransform = new ScaleTransform(1, 1); fromSlide.RenderTransform = scaleTransform; var scaleAnimation = new DoubleAnimationUsingKeyFrames(); scaleAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(1, zeroKeyTime)); scaleAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(.8, endKeyTime)); scaleAnimation.Completed += (sender, args) => { fromSlide.RenderTransform = null; }; var opacityAnimation = new DoubleAnimationUsingKeyFrames(); opacityAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(1, zeroKeyTime)); opacityAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(0, endKeyTime)); opacityAnimation.Completed += (sender, args) => { fromSlide.BeginAnimation(UIElement.OpacityProperty, null); fromSlide.Opacity = 0; }; //slide in new slide setup var translateTransform = new TranslateTransform(0, toSlide.ActualHeight); toSlide.RenderTransform = translateTransform; var slideAnimation = new DoubleAnimationUsingKeyFrames(); slideAnimation.KeyFrames.Add(new LinearDoubleKeyFrame(toSlide.ActualHeight, zeroKeyTime)); slideAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(toSlide.ActualHeight, midishKeyTime) { EasingFunction = _sineEase }); slideAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(0, endKeyTime) { EasingFunction = _sineEase }); //kick off! translateTransform.BeginAnimation(TranslateTransform.YProperty, slideAnimation); scaleTransform.BeginAnimation(ScaleTransform.ScaleXProperty, scaleAnimation); scaleTransform.BeginAnimation(ScaleTransform.ScaleYProperty, scaleAnimation); fromSlide.BeginAnimation(UIElement.OpacityProperty, opacityAnimation); zIndexController.Stack(toSlide, fromSlide); }
public void Wipe(TransitionerSlide fromSlide, TransitionerSlide toSlide, Point origin, IZIndexController zIndexController) { if (fromSlide == null) { throw new ArgumentNullException(nameof(fromSlide)); } if (toSlide == null) { throw new ArgumentNullException(nameof(toSlide)); } if (zIndexController == null) { throw new ArgumentNullException(nameof(zIndexController)); } var horizontalProportion = Math.Max(1.0 - origin.X, 1.0 * origin.X); var verticalProportion = Math.Max(1.0 - origin.Y, 1.0 * origin.Y); var radius = Math.Sqrt(Math.Pow(toSlide.ActualWidth * horizontalProportion, 2) + Math.Pow(toSlide.ActualHeight * verticalProportion, 2)); var scaleTransform = new ScaleTransform(0, 0); var translateTransform = new TranslateTransform(toSlide.ActualWidth * origin.X, toSlide.ActualHeight * origin.Y); var transformGroup = new TransformGroup(); transformGroup.Children.Add(scaleTransform); transformGroup.Children.Add(translateTransform); var ellipseGeomotry = new EllipseGeometry() { RadiusX = radius, RadiusY = radius, Transform = transformGroup }; toSlide.SetCurrentValue(UIElement.ClipProperty, ellipseGeomotry); zIndexController.Stack(toSlide, fromSlide); var zeroKeyTime = KeyTime.FromTimeSpan(TimeSpan.Zero); var midKeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(200)); var endKeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(400)); var opacityAnimation = new DoubleAnimationUsingKeyFrames(); opacityAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(1, zeroKeyTime)); opacityAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(1, midKeyTime)); opacityAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(0, endKeyTime)); opacityAnimation.Completed += (sender, args) => { fromSlide.BeginAnimation(UIElement.OpacityProperty, null); fromSlide.Opacity = 0; }; fromSlide.BeginAnimation(UIElement.OpacityProperty, opacityAnimation); var scaleAnimation = new DoubleAnimationUsingKeyFrames(); scaleAnimation.Completed += (sender, args) => { toSlide.SetCurrentValue(UIElement.ClipProperty, null); fromSlide.BeginAnimation(UIElement.OpacityProperty, null); fromSlide.Opacity = 0; }; scaleAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(0, zeroKeyTime)); scaleAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(1, endKeyTime)); scaleTransform.BeginAnimation(ScaleTransform.ScaleXProperty, scaleAnimation); scaleTransform.BeginAnimation(ScaleTransform.ScaleYProperty, scaleAnimation); }
public void Wipe(TransitionerSlide fromSlide, TransitionerSlide toSlide, Point origin, IZIndexController zIndexController) { if (fromSlide == null) { throw new ArgumentNullException(nameof(fromSlide)); } if (toSlide == null) { throw new ArgumentNullException(nameof(toSlide)); } if (zIndexController == null) { throw new ArgumentNullException(nameof(zIndexController)); } // Set up time points var zeroKeyTime = KeyTime.FromTimeSpan(TimeSpan.Zero); var endKeyTime = KeyTime.FromTimeSpan(Duration); // Set up coordinates double fromStartX = 0, fromEndX = 0, toStartX = 0, toEndX = 0; double fromStartY = 0, fromEndY = 0, toStartY = 0, toEndY = 0; if (Direction == SlideDirection.Left) { fromEndX = -fromSlide.ActualWidth; toStartX = toSlide.ActualWidth; } else if (Direction == SlideDirection.Right) { fromEndX = fromSlide.ActualWidth; toStartX = -toSlide.ActualWidth; } else if (Direction == SlideDirection.Up) { fromEndY = -fromSlide.ActualHeight; toStartY = toSlide.ActualHeight; } else if (Direction == SlideDirection.Down) { fromEndY = fromSlide.ActualHeight; toStartY = -toSlide.ActualHeight; } // From var fromTransform = new TranslateTransform(fromStartX, fromStartY); fromSlide.RenderTransform = fromTransform; var fromXAnimation = new DoubleAnimationUsingKeyFrames(); fromXAnimation.KeyFrames.Add(new LinearDoubleKeyFrame(fromStartX, zeroKeyTime)); fromXAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(fromEndX, endKeyTime, _sineEase)); var fromYAnimation = new DoubleAnimationUsingKeyFrames(); fromYAnimation.KeyFrames.Add(new LinearDoubleKeyFrame(fromStartY, zeroKeyTime)); fromYAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(fromEndY, endKeyTime, _sineEase)); // To var toTransform = new TranslateTransform(toStartX, toStartY); toSlide.RenderTransform = toTransform; var toXAnimation = new DoubleAnimationUsingKeyFrames(); toXAnimation.KeyFrames.Add(new LinearDoubleKeyFrame(toStartX, zeroKeyTime)); toXAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(toEndX, endKeyTime, _sineEase)); var toYAnimation = new DoubleAnimationUsingKeyFrames(); toYAnimation.KeyFrames.Add(new LinearDoubleKeyFrame(toStartY, zeroKeyTime)); toYAnimation.KeyFrames.Add(new EasingDoubleKeyFrame(toEndY, endKeyTime, _sineEase)); // Set up events fromXAnimation.Completed += (sender, args) => { fromTransform.BeginAnimation(TranslateTransform.XProperty, null); fromTransform.X = fromEndX; fromSlide.RenderTransform = null; }; fromYAnimation.Completed += (sender, args) => { fromTransform.BeginAnimation(TranslateTransform.YProperty, null); fromTransform.Y = fromEndY; fromSlide.RenderTransform = null; }; toXAnimation.Completed += (sender, args) => { toTransform.BeginAnimation(TranslateTransform.XProperty, null); toTransform.X = toEndX; toSlide.RenderTransform = null; }; toYAnimation.Completed += (sender, args) => { toTransform.BeginAnimation(TranslateTransform.YProperty, null); toTransform.Y = toEndY; toSlide.RenderTransform = null; }; // Animate fromTransform.BeginAnimation(TranslateTransform.XProperty, fromXAnimation); fromTransform.BeginAnimation(TranslateTransform.YProperty, fromYAnimation); toTransform.BeginAnimation(TranslateTransform.XProperty, toXAnimation); toTransform.BeginAnimation(TranslateTransform.YProperty, toYAnimation); zIndexController.Stack(toSlide, fromSlide); }