private void TVI_DragLeave(object sender, DragEventArgs e) { this.adorner?.Remove(); adorner = null; e.Handled = true; Debug.WriteLine("TVI DragLeave"); }
private void TVI_DragEnter(object sender, DragEventArgs e) { if (DragDropController?.CanDrop == null) { return; } var tvi = sender as TreeViewItem; var ti = tvi.DataContext as TreeItem; if (this.adorner == null) { var mousePos = e.GetPosition(tvi); var header = tvi.Template.FindName("PART_Header", tvi) as FrameworkElement; var heightHeader = header?.ActualHeight ?? tvi.ActualHeight; var draggedTreeItem = e.Data.GetData(typeof(TreeItem)); var yPercentage = mousePos.Y * 100 / heightHeader; this.adorner = new TreeItemDragOverAdorner(header, yPercentage); } Debug.WriteLine($"DragEnter {ti.Data}, Effects: {e.Effects}"); // keine weitere Aktion e.Handled = true; }
private void TVI_MouseMove(object sender, MouseEventArgs e) { if (DragDropController?.CanDrag == null) { return; } TreeViewItem tvi = sender as TreeViewItem; // Ist die Maus vielleicht bereits auf ein anderes Item gerutscht? if (tvi != treeViewItemToDrag) { return; } isDragging = e.GetPosition(this) != startposition; var ti = tvi.DataContext as TreeItem; // Rahmenbedingungen für DragDrop-Start prüfen if (e.LeftButton == MouseButtonState.Pressed && isDragging && DragDropController.CanDrag(ti)) { Debug.WriteLine($"DragDrop starting: {ti}"); ScrollUpBtn.Visibility = Visibility.Visible; ScrollDownBtn.Visibility = Visibility.Visible; // DoDragDrop kehrt erst nach Abschluss der Aktion wieder zurück DragDrop.DoDragDrop(tvi, ti, DragDropEffects.All); // fertig ScrollUpBtn.Visibility = Visibility.Collapsed; ScrollDownBtn.Visibility = Visibility.Collapsed; this.adorner?.Remove(); adorner = null; customCursor = null; Debug.WriteLine($"DragDrop completed: {ti}"); } }
private void TVI_Drop(object sender, DragEventArgs e) { if (DragDropController?.Drop == null) { return; } var tvi = sender as TreeViewItem; var ti = tvi.DataContext as TreeItem; var mousePos = e.GetPosition(tvi); var header = tvi.Template.FindName("PART_Header", tvi) as FrameworkElement; var heightHeader = header?.ActualHeight ?? tvi.ActualHeight; this.adorner?.Remove(); adorner = null; customCursor = null; var draggedTreeItem = e.Data.GetData(typeof(TreeItem)); DragDropController.Drop(draggedTreeItem, ti, mousePos.Y * 100 / heightHeader); e.Handled = true; }