/// <summary> /// Zooms to the specified factor using an animation instead of /// immediately jumping to that value as with ZoomToFactor(). /// </summary> /// <remarks> /// Note that calling ZoomToFactor() does not update ZoomFactor immediately, /// so it is important to wait for it to change before calling this method. /// </remarks> /// <param name="scrollViewer"></param> /// <param name="factor"></param> /// <param name="duration"></param> /// <param name="easingFunction"></param> /// <returns></returns> public static async Task ZoomToFactorWithAnimation( this ScrollViewer scrollViewer, double factor, TimeSpan duration, EasingFunctionBase easingFunction) { var handler = GetAnimatedScrollHandler(scrollViewer); if (handler == null) { handler = new ScrollViewerAnimatedScrollHandler(); SetAnimatedScrollHandler(scrollViewer, handler); } await handler.ZoomToFactorWithAnimation( factor, duration, easingFunction); }
/// <summary> /// Scrolls to the specified offset using an animation instead of /// immediately jumping to that offset as with ScrollToVerticalOffset(). /// </summary> /// <remarks> /// Note that calling ScrollToVerticalOffset() does not update VerticalOffset immediately, /// so it is important to wait for it to change before calling this method. /// </remarks> /// <param name="scrollViewer"></param> /// <param name="offset"></param> /// <param name="duration"></param> /// <param name="easingFunction"></param> /// <returns></returns> public static void ScrollToVerticalOffsetAnimation( this ScrollViewer scrollViewer, double offset, TimeSpan duration, EasingFunctionBase easingFunction) { var handler = GetAnimatedScrollHandler(scrollViewer); if (handler == null) { handler = new ScrollViewerAnimatedScrollHandler(); SetAnimatedScrollHandler(scrollViewer, handler); } handler.ScrollToVerticalOffsetAnimation( offset, duration, easingFunction); }
/// <summary> /// Scrolls to the specified offset using an animation instead of /// immediately jumping to that offset as with ScrollToHorizontalOffset(). /// </summary> /// <remarks> /// Note that calling ScrollToHorizontalOffset() does not update HorizontalOffset immediately, /// so it is important to wait for it to change before calling this method. /// </remarks> /// <param name="scrollViewer"></param> /// <param name="offset"></param> /// <param name="duration"></param> /// <param name="easingFunction"></param> /// <returns></returns> public static async Task ScrollToHorizontalOffsetWithAnimation( this ScrollViewer scrollViewer, double offset, TimeSpan duration, EasingFunctionBase easingFunction) { var handler = GetAnimatedScrollHandler(scrollViewer); if (handler == null) { handler = new ScrollViewerAnimatedScrollHandler(); SetAnimatedScrollHandler(scrollViewer, handler); } await handler.ScrollToHorizontalOffsetWithAnimation( offset, duration, easingFunction); }
/// <summary> /// Handles changes to the AnimatedScrollHandler property. /// </summary> /// <param name="d"> /// The <see cref="DependencyObject"/> on which /// the property has changed value. /// </param> /// <param name="e"> /// Event data that is issued by any event that /// tracks changes to the effective value of this property. /// </param> private static void OnAnimatedScrollHandlerChanged( DependencyObject d, DependencyPropertyChangedEventArgs e) { ScrollViewerAnimatedScrollHandler oldAnimatedScrollHandler = (ScrollViewerAnimatedScrollHandler)e.OldValue; ScrollViewerAnimatedScrollHandler newAnimatedScrollHandler = (ScrollViewerAnimatedScrollHandler)d.GetValue(AnimatedScrollHandlerProperty); var scrollViewer = d as ScrollViewer; Debug.Assert(scrollViewer != null); if (oldAnimatedScrollHandler != null) { oldAnimatedScrollHandler.Detach(); } if (newAnimatedScrollHandler != null) { newAnimatedScrollHandler.Attach(scrollViewer); } }
public static void SetAnimatedScrollHandler(DependencyObject d, ScrollViewerAnimatedScrollHandler value) { d.SetValue(AnimatedScrollHandlerProperty, value); }