/// <summary>
        /// The mouse move.
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The e.
        /// </param>
        private void MouseMove(object sender, MouseEventArgs e)
        {
            if (!this.mouseCaptured)
            {
                return;
            }

            var frameworkElement = this.adorner as FrameworkElement;

            if (frameworkElement == null)
            {
                return;
            }

            double deltaY = e.GetPosition(null).Y - this.mouseY;
            double deltaX = e.GetPosition(null).X - this.mouseX;

            var offset = new Point(this.adorner.Offset.X + deltaX, this.adorner.Offset.Y + deltaY);

            // constrain the popup to the bounds of the window
            if (this.adorner.ChildPosition.Y + offset.Y < 0)
            {
                offset.Y = -this.adorner.ChildPosition.Y;
            }

            if (this.adorner.ChildPosition.X + offset.X < 0)
            {
                offset.X = -this.adorner.ChildPosition.X;
            }

            Size boundariesSize = ScreenUtils.GetWindowSize();
            var  adornedElement = this.adorner.AdornedElement as FrameworkElement;

            if (adornedElement != null)
            {
                boundariesSize = new Size(adornedElement.ActualWidth, adornedElement.ActualHeight);
            }

            double maxY = boundariesSize.Height - frameworkElement.ActualHeight;

            if (this.adorner.ChildPosition.Y + offset.Y > maxY)
            {
                offset.Y = maxY - this.adorner.ChildPosition.Y;
            }

            double maxX = boundariesSize.Width - frameworkElement.ActualWidth;

            if (this.adorner.ChildPosition.X + offset.X > maxX)
            {
                offset.X = maxX - this.adorner.ChildPosition.X;
            }

            this.adorner.Offset = offset;

            this.mouseY = e.GetPosition(null).Y;
            this.mouseX = e.GetPosition(null).X;
        }
Esempio n. 2
0
        /// <summary>
        /// The mouse move.
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The e.
        /// </param>
        private void MouseMove(object sender, MouseEventArgs e)
        {
            if (!this.mouseCaptured)
            {
                return;
            }

            var frameworkElement = this.popup.Child as FrameworkElement;

            if (frameworkElement == null)
            {
                return;
            }

            double deltaY = e.GetPosition(null).Y - this.mouseY;
            double deltaX = e.GetPosition(null).X - this.mouseX;

            this.popup.VerticalOffset   += deltaY;
            this.popup.HorizontalOffset += deltaX;

            // constrain the popup to the bounds of the silverlight window
            if (this.popup.VerticalOffset < 0)
            {
                this.popup.VerticalOffset = 0;
            }

            if (this.popup.HorizontalOffset < 0)
            {
                this.popup.HorizontalOffset = 0;
            }

            Size windowSize = ScreenUtils.GetWindowSize();

            double maxY = windowSize.Height - frameworkElement.ActualHeight;

            if (this.popup.VerticalOffset > maxY)
            {
                this.popup.VerticalOffset = maxY;
            }

            double maxX = windowSize.Width - frameworkElement.ActualWidth;

            if (this.popup.HorizontalOffset > maxX)
            {
                this.popup.HorizontalOffset = maxX;
            }

            this.mouseY = e.GetPosition(null).Y;
            this.mouseX = e.GetPosition(null).X;
        }