internal DragSourceManagerBase(UIElement draggedElement, AdornerLayer adornerLayer, UIElement container, bool enableAutoScroll, bool showGhost)
        {
            if (draggedElement == null)
            {
                throw new ArgumentNullException("draggedElement");
            }

            if (container == null)
            {
                throw new ArgumentNullException("container");
            }

            m_draggedElement = draggedElement;
            m_container      = container;
            m_adornerLayer   = (adornerLayer != null) ? adornerLayer : AdornerLayer.GetAdornerLayer(container);
            m_showGhost      = showGhost;

            if (enableAutoScroll)
            {
                var scrollViewer = DragSourceManagerBase.GetScrollViewer(draggedElement);
                if (scrollViewer != null)
                {
                    m_autoScrollManager = new AutoScrollManager(scrollViewer);
                }
            }
        }
        public DragSourceManager(UIElement draggedElement, AdornerLayer adornerLayerInsideDragContainer, UIElement dragContainer, bool enableAutoScroll, bool showDraggedElementGhost)
        {
            if (draggedElement == null)
            {
                throw new ArgumentNullException("draggedElement");
            }

            if (dragContainer == null)
            {
                throw new ArgumentNullException("dragContainer");
            }

            this.SetDraggedElement(draggedElement);
            this.DragContainer           = dragContainer;
            this.ShowDraggedElementGhost = showDraggedElementGhost;

            // If the AdornerLayer was not provided to the DragSourceManager
            if (adornerLayerInsideDragContainer == null)
            {
                // Get the first AdornerLayer up the VisualTree of the dragContainer
                this.AdornerLayerInsideDragContainer = AdornerLayer.GetAdornerLayer(this.DragContainer);
            }
            else
            {
                this.AdornerLayerInsideDragContainer = adornerLayerInsideDragContainer;
            }

            if (enableAutoScroll)
            {
                DependencyObject element      = draggedElement;
                ScrollViewer     scrollViewer = null;

                while (element != null)
                {
                    element      = VisualTreeHelper.GetParent(element);
                    scrollViewer = element as ScrollViewer;

                    if (scrollViewer != null)
                    {
                        break;
                    }
                }

                if (scrollViewer != null)
                {
                    m_autoScrollManager = new AutoScrollManager(scrollViewer);
                }
            }
        }
    public DragSourceManager( UIElement draggedElement, AdornerLayer adornerLayerInsideDragContainer, UIElement dragContainer, bool enableAutoScroll, bool showDraggedElementGhost )
    {
      if( draggedElement == null )
        throw new ArgumentNullException( "draggedElement" );

      if( dragContainer == null )
        throw new ArgumentNullException( "dragContainer" );

      this.SetDraggedElement( draggedElement );
      this.DragContainer = dragContainer;
      this.ShowDraggedElementGhost = showDraggedElementGhost;

      // If the AdornerLayer was not provided to the DragSourceManager
      if( adornerLayerInsideDragContainer == null )
      {
        // Get the first AdornerLayer up the VisualTree of the dragContainer
        this.AdornerLayerInsideDragContainer = AdornerLayer.GetAdornerLayer( this.DragContainer );
      }
      else
      {
        this.AdornerLayerInsideDragContainer = adornerLayerInsideDragContainer;
      }

      if( enableAutoScroll )
      {
        DependencyObject element = draggedElement;
        ScrollViewer scrollViewer = null;

        while( element != null )
        {
          element = VisualTreeHelper.GetParent( element );
          scrollViewer = element as ScrollViewer;

          if( scrollViewer != null )
            break;
        }

        if( scrollViewer != null )
        {
          m_autoScrollManager = new AutoScrollManager( scrollViewer );
        }
      }
    }