static void VisualLoaded(object sender, RoutedEventArgs e) { var fe = sender as FrameworkElement; if (fe != null) { var v = ExtensionServices.GetVisualChild <ScrollViewer>(fe); if (v != null) { AttachScrollViewer(v, true); fe.Loaded -= VisualLoaded; } } }
private static void AttachScrollViewer(DependencyObject d, bool newValue) { var scoller = d as ScrollViewer; if (scoller != null) { if (newValue) { scoller.PreviewMouseLeftButtonDown += ScollerPreviewMouseLeftButtonDown; scoller.PreviewMouseLeftButtonUp += ScollerPreviewMouseLeftButtonUp; scoller.PreviewMouseMove += ScollerPreviewMouseMove; SetInertiaProcessor(scoller, new InertiaHandler(scoller)); } else { scoller.PreviewMouseLeftButtonDown -= ScollerPreviewMouseLeftButtonDown; scoller.PreviewMouseLeftButtonUp -= ScollerPreviewMouseLeftButtonUp; scoller.PreviewMouseMove -= ScollerPreviewMouseMove; var inertia = GetInertiaProcessor(scoller); if (inertia != null) { inertia.Dispose(); } } } else { var sbar = ExtensionServices.GetVisualChild <ScrollViewer>(d); if (sbar != null) { AttachScrollViewer(sbar, newValue); } else { var visual = d as FrameworkElement; if (visual != null) { visual.Loaded += VisualLoaded; } } } }