/// <summary>
 /// Scroll a ScrollViewer vertically by a given offset.
 ///
 /// </summary>
 /// <param name="viewer">The ScrollViewer.</param><param name="offset">The vertical offset to scroll.</param>
 private static void ScrollByVerticalOffset(ScrollViewer viewer, double offset)
 {
     Debug.Assert(viewer != null, "viewer should not be null!");
     offset += viewer.VerticalOffset;
     offset  = ScrollViewerExtensions.CoerceVerticalOffset(viewer, offset);
     viewer.ScrollToVerticalOffset(offset);
 }
        /// <summary>
        /// Handles the mouse wheel event.
        ///
        /// </summary>
        /// <param name="sender">The ScrollViewer.</param><param name="e">Event arguments.</param>
        private static void OnMouseWheel(object sender, MouseWheelEventArgs e)
        {
            ScrollViewer viewer = sender as ScrollViewer;

            Debug.Assert(viewer != null, "sender should be a non-null ScrollViewer!");
            Debug.Assert(e != null, "e should not be null!");
            if (e.Handled)
            {
                return;
            }
            double offset = ScrollViewerExtensions.CoerceVerticalOffset(viewer, viewer.VerticalOffset - (double)e.Delta);

            viewer.ScrollToVerticalOffset(offset);
            e.Handled = true;
        }