Пример #1
0
        protected override void OnPreviewMouseMove(MouseEventArgs e)
        {
            base.OnPreviewMouseMove(e);

            if (this.IsMouseCaptured)
            {
                if (this.isDragging)
                {
                    Point currentPosition = e.GetPosition(this);

                    double originalLeft = Canvas.GetLeft(ResizeHandles.SelectedElement);

                    double originalTop = Canvas.GetTop(ResizeHandles.SelectedElement);

                    double elementWidth = ResizeHandles.SelectedElement.GetPropertyValue("ActualWidth").ToDouble();

                    double elementHeigth = ResizeHandles.SelectedElement.GetPropertyValue("ActualHeight").ToDouble();

                    double elementLeft = (currentPosition.X - this.startPoint.X) + this.selectedElementOrigins.X;

                    double elementTop = (currentPosition.Y - this.startPoint.Y) + this.selectedElementOrigins.Y;

                    double offsetLeft = elementLeft - originalLeft;

                    double offsetTop = elementTop - originalTop;

                    if (elementLeft < 0)
                    {
                        elementLeft = this.isHandle ? ResizeHandles.HandleSize * -1 : 0;
                    }

                    if (elementTop < 0)
                    {
                        elementTop = this.isHandle ? ResizeHandles.HandleSize * -1 : 0;
                    }

                    if (this.isHandle)
                    {
                        // This moves the handle block
                        ResizeHandles.MoveObject(base.ActualWidth, base.ActualHeight, elementLeft, elementWidth, elementTop, elementHeigth);

                        ResizeHandles.SelectedElement.ResizeElements(elementTop, elementLeft);
                    }
                    else
                    {
                        ResizeHandles.MoveObjects(base.ActualWidth, base.ActualHeight,
                                                  elementLeft, elementWidth, elementTop, elementHeigth,
                                                  offsetLeft, offsetTop);
                    }
                }
            }
        }