private static void OnIsEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var diagram = (RadDiagram)d; if (e.OldValue != null) { ConnectionManipulationAutoScrollBehavior.DetachHandlers(diagram); } if (e.NewValue != null) { bool isEnabled = (bool)e.NewValue; if (isEnabled) { ConnectionManipulationAutoScrollBehavior.AddAssosiation(diagram); diagramInfos[diagram].ScrollingTimer.Tick += ScrollingTimer_Tick; diagram.PreviewMouseMove += diagram_PreviewMouseMove; } else { ConnectionManipulationAutoScrollBehavior.DetachHandlers(diagram); ConnectionManipulationAutoScrollBehavior.RemoveAssosiation(diagram); } } }
static void diagram_PreviewMouseMove(object sender, MouseEventArgs e) { var diagram = (RadDiagram)sender; var diagramInfo = diagramInfos[diagram]; if (IsAutoScrollingAllowed(diagramInfo)) { diagramInfo.AutoScrollingDirection = ConnectionManipulationAutoScrollBehavior.GetScrollingDirection(diagram, e.GetPosition(diagram)); if (!diagramInfo.ScrollingTimer.IsEnabled && diagramInfo.AutoScrollingDirection != ScrollingDirection.None) { diagramInfo.ScrollingTimer.Start(); } // if the auto scrolling is running cancel the default drag operation if (diagramInfo.ScrollingTimer.IsEnabled) { e.Handled = true; } } }