void designPanel_DragOver(object sender, DragEventArgs e)
        {
            try
            {
                IDesignPanel designPanel = (IDesignPanel)sender;
                e.Effects = DragDropEffects.Copy;
                e.Handled = true;
                Point p = e.GetPosition(designPanel);

                if (moveLogic == null)
                {
                    if (e.Data.GetData(typeof(CreateComponentTool)) != this)
                    {
                        return;
                    }
                    // TODO: dropLayer in designPanel
                    designPanel.IsAdornerLayerHitTestVisible = false;
                    DesignPanelHitTestResult result = designPanel.HitTest(p, false, true, HitTestType.Default);

                    if (result.ModelHit != null)
                    {
                        designPanel.Focus();
                        DesignItem createdItem = CreateItem(designPanel.Context);
                        if (AddItemWithDefaultSize(result.ModelHit, createdItem, e.GetPosition(result.ModelHit.View)))
                        {
                            moveLogic = new MoveLogic(createdItem);

                            if (designPanel.Context.Services.Component is XamlComponentService)
                            {
                                ((XamlComponentService)designPanel.Context.Services.Component)
                                .RaiseComponentRegisteredAndAddedToContainer(createdItem);
                            }

                            createPoint = p;
                            // We'll keep the ChangeGroup open as long as the moveLogic is active.
                        }
                        else
                        {
                            // Abort the ChangeGroup created by the CreateItem() call.
                            changeGroup.Abort();
                        }
                    }
                }
                else if ((moveLogic.ClickedOn.View as FrameworkElement).IsLoaded)
                {
                    if (moveLogic.Operation == null)
                    {
                        moveLogic.Start(createPoint);
                    }
                    else
                    {
                        moveLogic.Move(p);
                    }
                }
            }
            catch (Exception x)
            {
                DragDropExceptionHandler.RaiseUnhandledException(x);
            }
        }
Exemple #2
0
        public DragMoveMouseGesture(DesignItem clickedOn, bool isDoubleClick, bool setSelectionIfNotMoving = false)
        {
            Debug.Assert(clickedOn != null);

            this.isDoubleClick           = isDoubleClick;
            this.setSelectionIfNotMoving = setSelectionIfNotMoving;
            this.positionRelativeTo      = clickedOn.Services.DesignPanel;

            moveLogic = new MoveLogic(clickedOn);
        }
 void designPanel_DragLeave(object sender, DragEventArgs e)
 {
     try
     {
         if (moveLogic != null)
         {
             moveLogic.Cancel();
             moveLogic.ClickedOn.Services.Selection.SetSelectedComponents(null);
             moveLogic.DesignPanel.IsAdornerLayerHitTestVisible = true;
             moveLogic = null;
             changeGroup.Abort();
         }
     }
     catch (Exception x)
     {
         DragDropExceptionHandler.RaiseUnhandledException(x);
     }
 }
        void designPanel_Drop(object sender, DragEventArgs e)
        {
            try
            {
                if (moveLogic != null)
                {
                    moveLogic.Stop();
                    if (moveLogic.ClickedOn.Services.Tool.CurrentTool is CreateComponentTool)
                    {
                        moveLogic.ClickedOn.Services.Tool.CurrentTool = moveLogic.ClickedOn.Services.Tool.PointerTool;
                    }
                    moveLogic.DesignPanel.IsAdornerLayerHitTestVisible = true;
                    moveLogic = null;
                    changeGroup.Commit();

                    e.Handled = true;
                }
            }
            catch (Exception x)
            {
                DragDropExceptionHandler.RaiseUnhandledException(x);
            }
        }