static void Scroll(DependencyObject o, DragEventArgs e) { ScrollViewer scrollViewer = o.GetVisualDescendent<ScrollViewer>(); if (scrollViewer != null) { Point position = e.GetPosition(scrollViewer); double scrollMargin = Math.Min(scrollViewer.FontSize * 2, scrollViewer.ActualHeight / 2); if (position.X >= scrollViewer.ActualWidth - scrollMargin && scrollViewer.HorizontalOffset < scrollViewer.ExtentWidth - scrollViewer.ViewportWidth) { scrollViewer.LineRight(); } else if (position.X < scrollMargin && scrollViewer.HorizontalOffset > 0) { scrollViewer.LineLeft(); } else if (position.Y >= scrollViewer.ActualHeight - scrollMargin && scrollViewer.VerticalOffset < scrollViewer.ExtentHeight - scrollViewer.ViewportHeight) { scrollViewer.LineDown(); } else if (position.Y < scrollMargin && scrollViewer.VerticalOffset > 0) { scrollViewer.LineUp(); } } }
private static void Scroll(DependencyObject visualTarget, DragEventArgs e) { ScrollViewer scrollViewer = null; if (visualTarget is TabControl) { var tabPanel = visualTarget.GetVisualDescendent<TabPanel>(); if (tabPanel != null) { scrollViewer = tabPanel.GetVisualAncestor<ScrollViewer>(); if (scrollViewer == null) { return; } } } scrollViewer = scrollViewer ?? visualTarget.GetVisualDescendent<ScrollViewer>(); if (scrollViewer != null) { var position = e.GetPosition(scrollViewer); var scrollMargin = Math.Min(scrollViewer.FontSize * 2, scrollViewer.ActualHeight / 2); if (position.X >= scrollViewer.ActualWidth - scrollMargin && scrollViewer.HorizontalOffset < scrollViewer.ExtentWidth - scrollViewer.ViewportWidth) { scrollViewer.LineRight(); } else if (position.X < scrollMargin && scrollViewer.HorizontalOffset > 0) { scrollViewer.LineLeft(); } else if (position.Y >= scrollViewer.ActualHeight - scrollMargin && scrollViewer.VerticalOffset < scrollViewer.ExtentHeight - scrollViewer.ViewportHeight) { scrollViewer.LineDown(); } else if (position.Y < scrollMargin && scrollViewer.VerticalOffset > 0) { scrollViewer.LineUp(); } } }