private void OnTreeViewItemParentChanging(object sender, VirtualizingParentChangedEventArgs e) { if (!CanHandleEvent(sender)) { return; } TreeViewItemContainerData tvItem = (TreeViewItemContainerData)sender; TreeViewItemContainerData oldParent = e.OldParent; if (DropMarker.Action != ItemDropAction.SetLastChild && DropMarker.Action != ItemDropAction.None) { if (oldParent != null && !oldParent.HasChildren(this)) { VirtualizingTreeViewItem tvOldParent = (VirtualizingTreeViewItem)GetItemContainer(oldParent.Item); if (tvOldParent != null) { tvOldParent.CanExpand = false; } else { oldParent.CanExpand = false; } } return; } TreeViewItemContainerData tvDropTargetData = e.NewParent; VirtualizingTreeViewItem tvDropTarget = null; if (tvDropTargetData != null) { tvDropTarget = (VirtualizingTreeViewItem)GetItemContainer(tvDropTargetData.Item); } if (tvDropTarget != null) { if (tvDropTarget.CanExpand) { tvDropTarget.IsExpanded = true; } else { tvDropTarget.CanExpand = true; try { m_expandSilently = true; tvDropTarget.IsExpanded = true; } finally { m_expandSilently = false; } } } else { if (tvDropTargetData != null) { tvDropTargetData.CanExpand = true; tvDropTargetData.IsExpanded = true; } } TreeViewItemContainerData dragItemChild = tvItem.FirstChild(this); TreeViewItemContainerData lastChild = null; if (tvDropTargetData != null) { lastChild = tvDropTargetData.LastChild(this); if (lastChild == null) { lastChild = tvDropTargetData; } } else { lastChild = (TreeViewItemContainerData)LastItemContainerData(); } if (lastChild != tvItem) { TreeViewItemContainerData lastDescendant = lastChild.LastDescendant(this); if (lastDescendant != null) { lastChild = lastDescendant; } if (!lastChild.IsDescendantOf(tvItem)) { base.SetNextSiblingInternal(lastChild, tvItem); } } if (dragItemChild != null) { MoveSubtree(tvItem, dragItemChild); } if (oldParent != null && !oldParent.HasChildren(this)) { VirtualizingTreeViewItem tvOldParent = (VirtualizingTreeViewItem)GetItemContainer(oldParent.Item); if (tvOldParent != null) { tvOldParent.CanExpand = false; } else { oldParent.CanExpand = false; } } }
private void OnTreeViewItemParentChanged(object sender, VirtualizingParentChangedEventArgs e) { if (!this.CanHandleEvent(sender)) { return; } TreeViewItemContainerData itemContainerData1 = (TreeViewItemContainerData)sender; TreeViewItemContainerData oldParent = e.OldParent; if (this.DropMarker.Action != ItemDropAction.SetLastChild && this.DropMarker.Action != ItemDropAction.None) { if (oldParent == null || oldParent.HasChildren(this)) { return; } VirtualizingTreeViewItem itemContainer = (VirtualizingTreeViewItem)this.GetItemContainer(oldParent.Item); if (Object.op_Inequality((Object)itemContainer, (Object)null)) { itemContainer.CanExpand = false; } else { oldParent.CanExpand = false; } } else { TreeViewItemContainerData newParent = e.NewParent; VirtualizingTreeViewItem virtualizingTreeViewItem = (VirtualizingTreeViewItem)null; if (newParent != null) { virtualizingTreeViewItem = (VirtualizingTreeViewItem)this.GetItemContainer(newParent.Item); } if (Object.op_Inequality((Object)virtualizingTreeViewItem, (Object)null)) { if (virtualizingTreeViewItem.CanExpand) { virtualizingTreeViewItem.IsExpanded = true; } else { virtualizingTreeViewItem.CanExpand = true; try { this.m_expandSilently = true; virtualizingTreeViewItem.IsExpanded = true; } finally { this.m_expandSilently = false; } } } else if (newParent != null) { newParent.CanExpand = true; newParent.IsExpanded = true; } TreeViewItemContainerData child = itemContainerData1.FirstChild(this); TreeViewItemContainerData itemContainerData2 = newParent == null ? (TreeViewItemContainerData)this.LastItemContainerData() : newParent.LastChild(this) ?? newParent; if (itemContainerData2 != itemContainerData1) { TreeViewItemContainerData itemContainerData3 = itemContainerData2.LastDescendant(this); if (itemContainerData3 != null) { itemContainerData2 = itemContainerData3; } if (!itemContainerData2.IsDescendantOf(itemContainerData1)) { base.SetNextSiblingInternal((ItemContainerData)itemContainerData2, (ItemContainerData)itemContainerData1); } } if (child != null) { this.MoveSubtree(itemContainerData1, child); } if (oldParent == null || oldParent.HasChildren(this)) { return; } VirtualizingTreeViewItem itemContainer = (VirtualizingTreeViewItem)this.GetItemContainer(oldParent.Item); if (Object.op_Inequality((Object)itemContainer, (Object)null)) { itemContainer.CanExpand = false; } else { oldParent.CanExpand = false; } } }