/// <summary>
        /// Clears this instance.
        /// </summary>
        public void Clear()
        {
            if (this.Items.Count == 0 || !this.treeView.MultiSelect)
            {
                return;
            }

            treeView.BeginUpdate();

            while (this.Items.Count > 0)
            {
                RadTreeNode node = this.Items[0];
                node.Selected = false;
            }

            treeView.EndUpdate(true, RadTreeViewElement.UpdateActions.StateChanged);
        }
        protected override void OnPreviewDragDrop(RadDropEventArgs e)
        {
            bool        isScrollerNode  = this.owner.Scroller.Traverser.Current == draggedNode;
            RadTreeNode newScrollerNode = null;

            if (isScrollerNode)
            {
                newScrollerNode = draggedNode.NextNode;

                if (newScrollerNode == null)
                {
                    newScrollerNode = draggedNode.PrevNode;
                }
            }

            TreeNodeElement    targetNodeElement = e.HitTarget as TreeNodeElement;
            RadTreeViewElement targetTreeView    = targetNodeElement == null ? e.HitTarget as RadTreeViewElement : targetNodeElement.TreeViewElement;
            List <RadTreeNode> draggedNodes      = this.GetDraggedNodes(draggedNode);

            bool dragDropBetweenTrees = targetTreeView != this.owner;

            targetTreeView.BeginUpdate();

            if (dragDropBetweenTrees)
            {
                this.owner.BeginUpdate();
            }

            if (targetNodeElement != null)
            {
                this.PerformDragDrop(e.DropLocation, targetNodeElement, draggedNodes);
            }
            else
            {
                foreach (RadTreeNode node in draggedNodes)
                {
                    if (!this.OnDragEnding(DropPosition.AsChildNode, node, null))
                    {
                        continue;
                    }

                    node.Remove();
                    targetTreeView.Nodes.Add(node);
                    this.owner.OnDragEnded(new RadTreeViewDragEventArgs(node, null));
                }
            }

            if (dragDropBetweenTrees)
            {
                this.owner.EndUpdate();
            }

            if (isScrollerNode)
            {
                this.owner.Scroller.ScrollToItem(newScrollerNode);
            }

            targetTreeView.EndUpdate();
            targetTreeView.SelectedNode = draggedNode;

            base.OnPreviewDragDrop(e);
        }
        protected override void OnPreviewDragDrop(RadDropEventArgs e)
        {
            base.OnPreviewDragDrop(e);
            if (this.CancelPreviewDragDrop(e))
            {
                return;
            }
            bool        flag1        = this.owner.Scroller.Traverser.Current == this.draggedNode;
            RadTreeNode radTreeNode1 = (RadTreeNode)null;

            if (flag1)
            {
                radTreeNode1 = this.draggedNode.NextNode ?? this.draggedNode.PrevNode;
            }
            TreeNodeElement    hitTarget          = e.HitTarget as TreeNodeElement;
            RadTreeViewElement radTreeViewElement = hitTarget == null ? e.HitTarget as RadTreeViewElement : hitTarget.TreeViewElement;
            List <RadTreeNode> selectedNodes      = this.GetSelectedNodes(this.draggedNode);
            List <RadTreeNode> draggedNodes       = this.GetDraggedNodes(this.draggedNode);
            bool flag2 = radTreeViewElement != null && radTreeViewElement != this.owner;

            radTreeViewElement?.BeginUpdate();
            if (flag2)
            {
                this.owner.BeginUpdate();
            }
            if (hitTarget != null && hitTarget.Data != null)
            {
                this.PerformDragDrop(e.DropLocation, hitTarget, draggedNodes);
            }
            else if (radTreeViewElement != null)
            {
                bool isCopyingNodes = this.IsCopyingNodes;
                foreach (RadTreeNode radTreeNode2 in draggedNodes)
                {
                    RadTreeNode radTreeNode3 = radTreeNode2;
                    if (this.OnDragEnding(DropPosition.AsChildNode, radTreeNode3, (RadTreeNode)null))
                    {
                        if (isCopyingNodes)
                        {
                            radTreeNode3 = this.CreateTreeNode(radTreeNode3);
                        }
                        else
                        {
                            radTreeNode3.Remove();
                        }
                        radTreeViewElement.Nodes.Add(radTreeNode3);
                        this.owner.OnDragEnded(new RadTreeViewDragEventArgs(radTreeNode3, (RadTreeNode)null));
                    }
                }
            }
            else if (draggedNodes.Count > 0)
            {
                this.owner.OnDragEnded(new RadTreeViewDragEventArgs(draggedNodes[0], (RadTreeNode)null));
            }
            if (flag2)
            {
                this.owner.EndUpdate();
            }
            if (flag1)
            {
                this.owner.Scroller.ScrollToItem(radTreeNode1);
            }
            if (radTreeViewElement == null)
            {
                return;
            }
            radTreeViewElement.EndUpdate();
            radTreeViewElement.SelectedNode = this.draggedNode;
            foreach (RadTreeNode radTreeNode2 in draggedNodes)
            {
                radTreeNode2.Selected = true;
            }
            foreach (RadTreeNode radTreeNode2 in selectedNodes)
            {
                radTreeNode2.Selected = true;
            }
        }