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;
                }
            }
        }