Exemplo n.º 1
0
 private void TVI_DragLeave(object sender, DragEventArgs e)
 {
     this.adorner?.Remove();
     adorner   = null;
     e.Handled = true;
     Debug.WriteLine("TVI DragLeave");
 }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        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}");
            }
        }
Exemplo n.º 4
0
        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;
        }