private void DragSource_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { this.sourceItemsControl = (ItemsControl)sender; TreeListView tlv = (TreeListView)this.sourceItemsControl; this.topWindow = (Window)DranDropUtilities.FindAncestor(typeof(Window), this.sourceItemsControl); this.initialMousePosition = e.GetPosition(this.topWindow); Visual visual = e.OriginalSource as Visual; this.sourceItemContainer = DranDropUtilities.GetItemContainer(this.sourceItemsControl, visual); if (this.sourceItemContainer != null) { this.draggedData = sourceItemContainer.DataContext; } }
private void DecideDropTarget(DragEventArgs e) { int targetItemsControlCount = this.targetItemsControl.Items.Count; object draggedItem = e.Data.GetData(this.format.Name); Visual visual = e.OriginalSource as Visual; targetOverItem = DranDropUtilities.FindAncestor(typeof(TreeListViewItem), visual) as TreeListViewItem; if (targetOverItem == null) { this.targetItemContainer = null; this.insertionIndex = -1; e.Effects = DragDropEffects.None; return; } bool newDragOverNote = false; OutlinerNote dragOverNote = null; if (targetOverItem != null) { dragOverNote = targetOverItem.DataContext as OutlinerNote; if (dragOverNote != null) { if (__DragOverNote != dragOverNote) { if (__DragOverNote != null) { __DragOverNote.DragOverNote = false; } newDragOverNote = true; } } } ItemsControl parentItemsControl = targetOverItem.ParentItemsControl; if (parentItemsControl == null) { this.targetItemContainer = null; this.insertionIndex = -1; e.Effects = DragDropEffects.None; return; } if (targetItemsControlCount > 0) { this.hasVerticalOrientation = DranDropUtilities.HasVerticalOrientation(this.targetItemsControl.ItemContainerGenerator.ContainerFromIndex(0) as FrameworkElement); this.targetItemContainer = parentItemsControl; this.insertionIndex = parentItemsControl.ItemContainerGenerator.IndexFromContainer(targetOverItem); if (this.insertionIndex == -1) { this.targetItemContainer = null; this.insertionIndex = -1; e.Effects = DragDropEffects.None; return; } if (IsParent(this.targetItemContainer as TreeListViewItem, this.sourceItemContainer)) { this.targetItemContainer = null; this.insertionIndex = -1; e.Effects = DragDropEffects.None; return; } if (newDragOverNote && dragOverNote != null) { dragOverNote.DragOverNote = true; __DragOverNote = dragOverNote; } } else { this.targetItemContainer = null; this.insertionIndex = 0; } }
// DragSource public static MainWindow GetMainWindow(Visual visual) { return(DranDropUtilities.FindAncestor(typeof(Window), visual) as MainWindow); }