예제 #1
0
        /// <summary>
        /// Moves the Target.
        /// </summary>
        /// <remarks>
        /// This method checks the constraints (MinLeft, MaxLeft, etc) before moving the Target,
        /// and raises related events if it is required.
        /// </remarks>
        /// <param name="deltaX">The X distance to move.</param>
        /// <param name="deltaY">The Y distance to move.</param>
        /// <returns>True if the Target is actually moved.</returns>
        public bool Move(double deltaX, double deltaY)
        {
            if (Target == null)
                return false;

            if (Target.IsLoaded == false)
                return false;

            var delta = new Vector(deltaX, deltaY);

            // Adjusts the delta not to exceed the defined min-max positions.
            AdjustDeltaForMinMaxPositions(ref delta);

            // Raises the Moving event.
            if (!RaiseMovingEvent(this, Target, ref delta))
                return false;

            // Moves the target element.
            bool isMoved = FrameworkElementHelper.Move(Target, delta);

            // Raises the Moved event.
            RaiseMovedEvent(this, Target, delta);

            return isMoved;
        }
예제 #2
0
        /// <summary>
        /// Adjusts the delta not to exceed the defined min-max positions.
        /// </summary>
        /// <param name="dragDelta">The drag delta to adjust.</param>
        private void AdjustDeltaForMinMaxPositions(ref Vector dragDelta)
        {
            if (Target == null)
                return;

            // To use layout related properties the Target must be loaded.
            if (!Target.IsLoaded)
                return;

            // Gets the Target's left and top.
            double targetLeft, targetTop;

            if (Target is Window window)
            {
                targetLeft = window.Left;
                targetTop = window.Top;
            }
            else
            {
                targetLeft = FrameworkElementHelper.GetCanvasLeft(Target);
                targetTop = FrameworkElementHelper.GetCanvasTop(Target);
            }

            // Gets the Target's width and height.
            double targetWidth = Target.ActualWidth;
            double targetHeight = Target.ActualHeight;

            // Adjusts the delta for the defined min-max positions.
            if (targetLeft + targetWidth + dragDelta.X > MaxRight)
                dragDelta.X = MaxRight - targetLeft - targetWidth;

            if (targetLeft + targetWidth + dragDelta.X < MinRight)
                dragDelta.X = MinRight - targetLeft - targetWidth;

            if (targetTop + targetHeight + dragDelta.Y > MaxBottom)
                dragDelta.Y = MaxBottom - targetTop - targetHeight;

            if (targetTop + targetHeight + dragDelta.Y < MinBottom)
                dragDelta.Y = MinBottom - targetTop - targetHeight;

            if (targetLeft + dragDelta.X > MaxLeft)
                dragDelta.X = MaxLeft - targetLeft;

            if (targetLeft + dragDelta.X < MinLeft)
                dragDelta.X = MinLeft - targetLeft;

            if (targetTop + dragDelta.Y > MaxTop)
                dragDelta.Y = MaxTop - targetTop;

            if (targetTop + dragDelta.Y < MinTop)
                dragDelta.Y = MinTop - targetTop;
        }
예제 #3
0
        /// <summary>
        /// Adjusts not to exceed the defined min-max positions.
        /// </summary>
        private void AdjustForMinMaxPositions()
        {
            if (Target == null)
                return;

            if (Target.IsLoaded == false)
                return;

            // Gets the delta that is not exceed the defined min-max positions.
            Vector delta = new Vector();
            AdjustDeltaForMinMaxPositions(ref delta);

            // Applies the delta.
            FrameworkElementHelper.Move(Target, delta);
        }
예제 #4
0
        /// <summary>
        /// Resizes the target.
        /// </summary>
        /// <param name="mode">The resize mode.</param>
        /// <param name="e">The event arguments.</param>
        private void Resize(BorderResizeMode mode, DragDeltaEventArgs e)
        {
            if (Target == null)
            {
                return;
            }

            // Converts the DragDeltaEventArgs into a Vector.
            Vector dragDelta = new Vector(e.HorizontalChange, e.VerticalChange);

            // Raises the Resizing event.
            if (!RaiseResizingEvent(this, Target, mode, ref dragDelta))
            {
                return;
            }

            // Resizes the target element.
            FrameworkElementHelper.Resize(Target, mode, dragDelta);

            // Raises the Resized event.
            RaiseResizedEvent(this, Target, mode, dragDelta);
        }