Пример #1
0
        private void TreeViewItem_Drop(object sender, DragEventArgs e)
        {
            if (!e.Data.GetDataPresent(typeof(DocTopic)))
            {
                return;
            }

            DocTopic sourceTopic = (DocTopic)e.Data.GetData(typeof(DocTopic));

            if (sourceTopic == null)
            {
                return;
            }

            var tvItem = WindowUtilities.FindAnchestor <TreeViewItem>((DependencyObject)e.OriginalSource);

            if (tvItem == null)
            {
                return;
            }
            var targetTopic = tvItem.DataContext as DocTopic;

            if (targetTopic == null)
            {
                return;
            }

            if (sourceTopic == targetTopic)
            {
                return;
            }

            if (MoveTopicCommand == null)
            {
                CreateMoveTopicCommand();
            }

            _dragContextMenu = new ContextMenu()
            {
                DataContext = DragMoveResult
            };

            var mi = new MenuItem
            {
                Header           = "Move underneath this item",
                Tag              = _dragContextMenu,
                Command          = MoveTopicCommand,
                CommandParameter = new DragMoveResult
                {
                    SourceTopic  = sourceTopic,
                    TargetTopic  = targetTopic,
                    DropLocation = DropLocations.Below
                }
            };

            _dragContextMenu.Items.Add(mi);
            _dragContextMenu.Items.Add(new Separator());
            _dragContextMenu.Items.Add(new MenuItem
            {
                Header           = "Move before this item",
                Tag              = _dragContextMenu,
                Command          = MoveTopicCommand,
                CommandParameter = new DragMoveResult
                {
                    SourceTopic  = sourceTopic,
                    TargetTopic  = targetTopic,
                    DropLocation = DropLocations.Before
                }
            });
            _dragContextMenu.Items.Add(new MenuItem
            {
                Header           = "Move after this item",
                Tag              = _dragContextMenu,
                Command          = MoveTopicCommand,
                CommandParameter = new DragMoveResult
                {
                    SourceTopic  = sourceTopic,
                    TargetTopic  = targetTopic,
                    DropLocation = DropLocations.After
                }
            });
            _dragContextMenu.Items.Add(new Separator());
            _dragContextMenu.Items.Add(new MenuItem
            {
                Header           = "Cancel topic move",
                Tag              = _dragContextMenu,
                Command          = MoveTopicCommand,
                CommandParameter = null
            });

            WindowUtilities.DoEvents();
            _dragContextMenu.Placement       = System.Windows.Controls.Primitives.PlacementMode.Mouse;
            _dragContextMenu.PlacementTarget = tvItem;
            _dragContextMenu.Visibility      = Visibility.Visible;
            _dragContextMenu.IsOpen          = true;
            WindowUtilities.DoEvents();
        }