Beispiel #1
0
        public static void OnDragOver(TreeViewItemEx tvItem, DragEventArgs e)
        {
            //System.Diagnostics.Debug.WriteLine($"DragOver: {tvItem.Item}");

            if (dropInfo != null && dropInfo.CouldHadleDrop(e))
            {
                dropInfo.UpdateInsertPosition(e);
                dropInfo.UpdateTargetCollectionAndIndex();
                if (dropInfo.CanAcceptData(DropInfo.ExtractDropData(dragInfo, e)))
                {
                    if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
                    {
                        e.Effects = DragDropEffects.Copy;
                    }
                    else
                    {
                        e.Effects = DragDropEffects.Move;
                    }
                }
                else
                {
                    e.Effects = DragDropEffects.None;
                }
                dropInfo.Effects = e.Effects;
                e.Handled        = true;
            }
        }
Beispiel #2
0
        public static void HandleDropForTarget(DragDropEffects result, DragEventArgs e = null)
        {
            System.Diagnostics.Debug.WriteLine($"HandleDropForTarget: {dropInfo.TargetItem.Item}");
            IEnumerable <CmdBase> data = DropInfo.ExtractDropData(dragInfo, e);

            if (dropInfo.CanAcceptData(data) &&
                (result.HasFlag(DragDropEffects.Move) || result.HasFlag(DragDropEffects.Copy)))
            {
                var idx = dropInfo.InsertIndex;
                if (result.HasFlag(DragDropEffects.Copy))
                {
                    data = data.Select(cmd => cmd.Copy());
                }

                var dataList = data.ToList();

                var souldDeselctItem = dropInfo.InsertPosition.HasFlag(DropInfo.RelativInsertPosition.IntoTargetItem) &&
                                       dropInfo.TargetItem.Item is CmdContainer con &&
                                       !con.IsExpanded;

                if (dataList.Count > 0)
                {
                    ToolWindowHistory.SaveState();
                }

                foreach (var sourceItem in dataList)
                {
                    if (souldDeselctItem)
                    {
                        sourceItem.IsSelected = false;
                    }
                    dropInfo.TargetContainer.Insert(idx++, sourceItem);
                }

                var focusItem = dragInfo?.DirectSourceItem ?? dataList.FirstOrDefault();

                var selectItemCommand = dropInfo.TargetItem.ParentTreeView.SelectItemCommand;
                if (souldDeselctItem)
                {
                    selectItemCommand.SafeExecute(dropInfo.TargetItem.Item);
                }
                else if (selectItemCommand.SafeExecute(focusItem))
                {
                    foreach (var sourceItem in dataList)
                    {
                        sourceItem.IsSelected = true;
                    }
                }
            }
            else
            {
                if (e != null)
                {
                    e.Effects = DragDropEffects.None;
                }
            }

            dropInfo?.DropTargetAdorner?.Detach();
            dropInfo = null;
        }
        public static void OnDragOver(TreeViewItemEx tvItem, DragEventArgs e)
        {
            //System.Diagnostics.Debug.WriteLine($"DragOver: {tvItem.Item}");

            if (dropInfo == null)
            {
                dropInfo = new DropInfo();
            }

            if (dropInfo.CouldHadleDrop(e))
            {
                // set the target item, this also initializes the DropTargetAdorner
                dropInfo.TargetItem = tvItem;

                // update data related to the current mouse position and the target item
                dropInfo.UpdateInsertPosition(e);
                dropInfo.UpdateTargetContainerAndIndex();

                // set the drop mode Copy|Move|None
                if (dropInfo.CanAcceptData(DropInfo.ExtractDropData(dragInfo, e)))
                {
                    if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
                    {
                        e.Effects = DragDropEffects.Copy;
                    }
                    else
                    {
                        e.Effects = DragDropEffects.Move;
                    }
                }
                else
                {
                    e.Effects = DragDropEffects.None;
                }

                // this controls the adorner
                dropInfo.Effects = e.Effects;

                e.Handled = true;
            }
        }