protected virtual bool CanDragOver(DropPosition dropPosition, TreeNodeElement targetNodeElement)
        {
            RadTreeViewElement targetTreeView = targetNodeElement.TreeViewElement;

            if (!targetNodeElement.Enabled || !targetTreeView.ElementTree.Control.AllowDrop || !this.IsInValidState(targetTreeView))
            {
                return(false);
            }

            RadTreeNode        targetNode = targetNodeElement.Data;
            List <RadTreeNode> nodes      = new List <RadTreeNode>(draggedNode.TreeViewElement.SelectedNodes);

            // If the count is empty, we are in single selection mode
            if (nodes.Count == 0)
            {
                nodes.Add(draggedNode);
            }

            foreach (RadTreeNode selected in nodes)
            {
                if (selected == targetNode)
                {
                    return(false);
                }

                RadTreeNode parent = targetNode.Parent;

                while (parent != null)
                {
                    if (parent == selected)
                    {
                        return(false);
                    }

                    parent = parent.Parent;
                }

                if (dropPosition == DropPosition.AsChildNode && selected.Parent == targetNode)
                {
                    return(false);
                }
            }

            if (dropPosition == DropPosition.AsChildNode)
            {
                targetTreeView.AutoExpand(targetNode);
            }

            targetTreeView.AutoScroll(targetNodeElement);
            return(true);
        }
        protected virtual bool CanDragOver(DropPosition dropPosition, TreeNodeElement targetNodeElement)
        {
            RadTreeViewElement treeViewElement = targetNodeElement.TreeViewElement;

            if (!targetNodeElement.Enabled || !treeViewElement.ElementTree.Control.AllowDrop || !this.IsInValidState(treeViewElement) || !targetNodeElement.Data.AllowDrop && dropPosition == DropPosition.AsChildNode)
            {
                return(false);
            }
            RadTreeNode        data            = targetNodeElement.Data;
            List <RadTreeNode> radTreeNodeList = new List <RadTreeNode>((IEnumerable <RadTreeNode>) this.draggedNode.TreeViewElement.SelectedNodes);

            if (radTreeNodeList.Count == 0)
            {
                radTreeNodeList.Add(this.draggedNode);
            }
            foreach (RadTreeNode radTreeNode in radTreeNodeList)
            {
                if (radTreeNode == data)
                {
                    return(false);
                }
                for (RadTreeNode parent = data.Parent; parent != null; parent = parent.Parent)
                {
                    if (parent == radTreeNode)
                    {
                        return(false);
                    }
                }
                if (dropPosition == DropPosition.AsChildNode && radTreeNode.Parent == data)
                {
                    return(false);
                }
            }
            if (dropPosition == DropPosition.AsChildNode && !data.Expanded && data.HasNodes)
            {
                treeViewElement.AutoExpand(data);
                this.HintWindow.Hide();
                this.HintWindow.Show();
            }
            if (treeViewElement.AutoScrollOnDragging(targetNodeElement))
            {
                this.HintWindow.Hide();
                this.HintWindow.Show();
            }
            return(true);
        }