CaptureMouse() public method

public CaptureMouse ( ) : bool
return bool
Beispiel #1
0
        public static void Start(UIElement element)
        {
            if (Element != null)
                throw new Exception("Another element is being dragged.  Only one element at a time may be dragged.");

            Element = element;
            Element.CaptureMouse();
            Element.MouseMove += new MouseEventHandler(UIElement_MouseMove);

            TransformGroup tg = Element.RenderTransform as TransformGroup;
            if (tg == null)
            {
                tg = CreateTransformGroup();
                Element.RenderTransform = tg;

            }//end if

            TranslateTransform tt = tg.Children.Where(t => t is TranslateTransform).SingleOrDefault() as TranslateTransform;
            if (tt == null)
                tt = new TranslateTransform();

            tt.X = 0;
            tt.Y = 0;

            OnDragStarted(Element);
        }
        public void AddDragHandler(UIElement canvas)
        {
            MouseButtonEventHandler startDragging = null;
            startDragging = (object sender, MouseButtonEventArgs downEvent) =>
            {
                if (downEvent.ChangedButton != MouseButton.Middle)
                {
                    downEvent.Handled = false;
                    return;
                }

                downEvent.Handled = true;

                canvas.CaptureMouse();

                var dragStartPos = PointConversions.CanvasFromMouse(downEvent.MouseDevice, canvas);
                var originStartPos = _origin.Point;

                MouseEventHandler MiddleDragListener = (object o, MouseEventArgs moveEvent) =>
                {
                    var mouse_pos = PointConversions.CanvasFromMouse(moveEvent.MouseDevice, canvas);

                    _origin.Point = new CanvasPosition
                    {
                        X = originStartPos.X + (mouse_pos.X - dragStartPos.X),
                        Y = originStartPos.Y + (mouse_pos.Y - dragStartPos.Y),
                    };
                };

                MouseButtonEventHandler mouseUpListener = null;
                mouseUpListener = (object bob, MouseButtonEventArgs upEvent) =>
                {
                    if (upEvent.ChangedButton != MouseButton.Middle)
                    {
                        upEvent.Handled = false;
                        return;
                    }
                    canvas.ReleaseMouseCapture();

                    upEvent.Handled = true;

                    canvas.MouseMove -= MiddleDragListener;
                    canvas.MouseUp -= mouseUpListener;
                    canvas.MouseDown += startDragging;
                };

                canvas.MouseMove += MiddleDragListener;
                canvas.MouseUp += mouseUpListener;
                canvas.MouseDown -= startDragging;
            };

            canvas.MouseDown += startDragging;
        }
 private void sp_PreviewMouseMove(object sender, MouseEventArgs e)
 {
     if (_isDown)
     {
         if ((_isDragging == false) && ((Math.Abs(e.GetPosition(this.sp).X - _startPoint.X) > SystemParameters.MinimumHorizontalDragDistance) ||
             (Math.Abs(e.GetPosition(this.sp).Y - _startPoint.Y) > SystemParameters.MinimumVerticalDragDistance)))
         {
             _isDragging = true;
             _realDragSource = e.Source as UIElement;
             _realDragSource.CaptureMouse();
             DragDrop.DoDragDrop(_dummyDragSource, new DataObject("UIElement", e.Source, true), DragDropEffects.Move);
         }
     }
 }
Beispiel #4
0
		public void DoDragDrop(IDataObject dataObject, UIElement dragSource, bool showDragVisual, bool useVisualBrush, DragDropEffects effects)
		{
			if (!IsDragging)
			{
				_useDefaultCursor = true;
				_dragScope = Application.Current.MainWindow.Content as FrameworkElement;
				bool previousDrop = _dragScope.AllowDrop;
				_dragScope.AllowDrop = true;

				_dragScope.PreviewDragOver += DragScope_PreviewDragOver;
				_dragScope.DragOver += DragScope_DragOver;
				_dragScope.DragLeave += DragScope_DragLeave;
				_dragScope.DragEnter += DragScope_DragEnter;
				_dragScope.GiveFeedback += DragSource_GiveFeedback;
				_dragScope.QueryContinueDrag += DragScope_QueryContinueDrag;

				var _layer = AdornerLayer.GetAdornerLayer(_dragScope);
				if (showDragVisual)
				{
					_dragAdorner = new DragAdorner(_dragScope, dragSource, useVisualBrush);
					_layer.Add(_dragAdorner);
				}

				IsDragging = true;
				_dragHasLeftScope = false;
				dragSource.CaptureMouse();
				DragDropEffects de = System.Windows.DragDrop.DoDragDrop(dragSource, dataObject, effects);
				dragSource.ReleaseMouseCapture();

				if (_dragAdorner != null)
				{
					_layer.Remove(_dragAdorner);
					_dragAdorner = null;
				}
				_dragScope.AllowDrop = previousDrop;

				_dragScope.GiveFeedback -= DragSource_GiveFeedback;
				_dragScope.DragLeave -= DragScope_DragLeave;
				_dragScope.DragLeave -= DragScope_DragEnter;
				_dragScope.QueryContinueDrag -= DragScope_QueryContinueDrag;
				_dragScope.DragOver -= DragScope_DragOver;
				_dragScope.PreviewDragOver -= DragScope_PreviewDragOver;

				IsDragging = false;
			}
		}
Beispiel #5
0
 public static void MouseDown(MouseButtonEventArgs e, UIElement element, IControlMouseInteraction control)
 {
     var location = e.GetPosition(element);
     var keysHeld = GetKeysHeld();
     float x = (float)location.X;
     float y = (float)location.Y;
     element.CaptureMouse();
     switch (e.ChangedButton)
     {
         case MouseButton.Left:
             control.MouseDown(x, y, MouseButtonType.Left, keysHeld);
             break;
         case MouseButton.Middle:
             control.MouseDown(x, y, MouseButtonType.Middle, keysHeld);
             break;
         case MouseButton.Right:
             control.MouseDown(x, y, MouseButtonType.Right, keysHeld);
             break;
     }
 }
Beispiel #6
0
        /// <summary>
        ///  Handler for element selection on the canvas providing resizing adorner.
        /// </summary>
        private void Select_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            #region Remove elsewhere before adding the layer.

            if (_selectedElement != null)
            {
                //Remove the adorner from the selected element
                _adornerLayer.Remove(_adornerLayer.GetAdorners(_selectedElement)[0]);
                _selectedElement = null;
            }

            #endregion

            _selectedElement = e.Source as UIElement;

            if (_selectedElement != null)
            {
                _adornerLayer = AdornerLayer.GetAdornerLayer(_selectedElement);
                _adornerLayer.Add(new ResizingAdorner(_selectedElement));

                if (_selectedElement.GetType() == typeof(Image) && _selectedElement.CaptureMouse())
                {
                    _lastPosition = e.GetPosition(ContentGrid);
                }
            }

            e.Handled = true;
        }
Beispiel #7
0
        public PageFlipper(Size pageSize, UIElement hotCorner, UIElement pageHolder, FrameworkElement curlShadow, FrameworkElement dropShadow)
        {
            Contract.Requires(pageSize.IsValid());
            m_pageSize = pageSize;

            m_hotCorner = hotCorner;

            m_curlShadow = curlShadow;
            m_dropShadow = dropShadow;

            // can be null
            m_pageHolder = pageHolder;

            #region helper values
            m_pageHalfHeight = m_pageSize.Height * .5;
            m_origin = new Point(m_pageSize.Width, m_pageSize.Height / 2.0);
            m_pageDiagonal = Math.Sqrt(m_pageSize.Width * m_pageSize.Width + m_pageSize.Height * m_pageSize.Height);
            m_pointLeft = new Point(-m_pageSize.Width, m_pageHalfHeight);
            m_pointRight = new Point(m_pageSize.Width, m_pageHalfHeight);
            #endregion

            #region clips and transforms

            m_pageTransformGroup = new TransformGroup();
            m_pageTransformGroup.Children.Add(new TranslateTransform() { Y = -m_pageSize.Height });
            m_pageTransformGroup.Children.Add(m_pageRotateTransform = new RotateTransform());
            m_pageTransformGroup.Children.Add(m_pageTranslateTransform = new TranslateTransform());

            m_pageHolderClip = new RectangleGeometry() { Rect = new Rect(0, 0, m_pageSize.Width, m_pageSize.Height * 2) };
            m_nextPageClip = new RectangleGeometry() { Rect = new Rect(0, 0, m_pageSize.Width * 2, m_pageSize.Height * 2) };

            if (m_curlShadow != null)
            {
                var group = new TransformGroup();
                group.Children.Add(m_curlShadowRotate = new RotateTransform());
                group.Children.Add(m_curlShadowTranslate = new TranslateTransform());
                m_curlShadow.RenderTransform = group;

                m_curlShadow.Height = m_pageDiagonal * 1.5;
                m_curlShadowRotate.CenterX = m_curlShadow.Width;
                m_curlShadowRotate.CenterY = m_pageDiagonal;

                m_curlShadowTranslate.Y = m_pageSize.Height - m_pageDiagonal;
            }

            if (m_dropShadow != null)
            {
                //m_dropShadowBlurEffect = new BlurEffect() { Radius = 20 };
                //m_dropShadow.Effect = m_dropShadowBlurEffect;
                m_dropShadow.RenderTransform = m_pageTransformGroup;
                m_dropShadow.Width = m_pageSize.Width;
                m_dropShadow.Height = m_pageSize.Height;
            }

            #endregion

            // MOST OF THE LOADED FUNCTION IS USED TO SET LOOK UP VALUES
            // BASED ON THE pageWidth AND pageHeight INITIALLY DEFINED.
            // POSITION THE PAGE AND SPINE VISUALS ACCORDINGLY
            m_mouse.X = m_pageSize.Width - 1;
            m_mouse.Y = m_pageHalfHeight - 1;
            m_follow = m_mouse;

            #region mouse handlers

            if (m_hotCorner != null && m_pageHolder != null)
            {
                m_hotCorner.MouseMove += (sender, e) =>
                {
                    m_animating = false;
                    m_listener.StartListening();
                    Point testBounds = (Point)e.GetPosition(m_pageHolder).Subtract(m_origin);
                    if (testBounds.X > m_pageSize.Width && testBounds.Y > m_pageHalfHeight)
                    {
                        m_mouse = m_pointRight;
                    }
                    else
                    {
                        m_mouse = testBounds;
                    }
                };

                m_hotCorner.MouseLeftButtonDown += (sender, e) =>
                {
                    m_hotCorner.CaptureMouse();
                };

                m_hotCorner.MouseLeftButtonUp += (sender, e) =>
                {
                    m_listener.StartListening();
                    m_hotCorner.ReleaseMouseCapture();
                    m_mouse = (m_mouse.X < 0) ? m_pointLeft : m_pointRight;
                };

                m_hotCorner.MouseLeave += (sender, e) =>
                {
                    m_listener.StartListening();
                    m_mouse = m_pointRight;
                };
            }

            #endregion

            m_listener.Rendering += (sender, args) => updateUI();
            m_listener.IsListeningChanged += (sender, args) =>
            {
                var handler = IsAnimatingChanged;
                if (handler != null)
                {
                    handler(this, EventArgs.Empty);
                }
            };
        }
        /// <summary>
        /// Handler for the event when the user starts dragging the dragElement.
        /// </summary>
        /// <param name="child">UIElement being dragged</param>
        /// <param name="position">Position in the child where the user clicked</param>
        internal void BeginFluidDrag(UIElement child, Point position)
        {
            if ((child == null) || (!IsComposing))
                return;

            // Call the event handler core on the Dispatcher. (Improves efficiency!)
            Dispatcher.BeginInvoke(new Action(() =>
            {
                child.Opacity = DragOpacity;
                child.SetValue(Canvas.ZIndexProperty, Z_INDEX_DRAG);
                // Capture further mouse events
                child.CaptureMouse();
                dragElement = child;
                lastDragElement = null;

                // Since we are scaling the dragElement by DragScale, the clickPoint also shifts
                dragStartPoint = new Point(position.X * DragScale, position.Y * DragScale);
            }));
        }
        /// <summary>
        /// Images the frame mouse move.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="System.Windows.Input.MouseEventArgs"/> instance containing the event data.</param>
        private void ImageFrameMouseMove(object sender, MouseEventArgs e)
        {
            if (!_isDown) return;
            var imagepointx = Math.Abs(e.GetPosition(this.ImageFrame).X - _startPoint.X) >
                              SystemParameters.MinimumHorizontalDragDistance;
            var imagepointy = Math.Abs(e.GetPosition(this.ImageFrame).Y - _startPoint.Y) >
                              SystemParameters.MinimumVerticalDragDistance;

            if (_isDragging || (!imagepointx && !imagepointy)) return;
            _isDragging = true;
            _realDragSource = e.Source as UIElement;
            if (_realDragSource != null)
                _realDragSource.CaptureMouse();

            DragDrop.DoDragDrop(_dummyDragSource, new DataObject(DragElementName, e.Source, true),
                DragDropEffects.Move);
        }
Beispiel #10
0
		public void DoDragDropSimulate(IDataObject dataObject, UIElement dragSource, bool showDragVisual, bool useVisualBrush, DragDropEffects effects, Action callback)
		{
			if (!IsDragging)
			{
				_dataObject = dataObject;
				_callback = callback;
				_useDefaultCursor = true;
				_dragScope = Application.Current.MainWindow.Content as FrameworkElement;
				_previousDrop = _dragScope.AllowDrop;
				_dragScope.AllowDrop = true;

				_dragScope.PreviewMouseLeftButtonUp += DragScope_PreviewMouseLeftButtonUp;
				_dragScope.MouseMove += DragScope_MouseMove;
				_dragScope.PreviewKeyDown += DragScope_PreviewKeyDown;

				_layer = AdornerLayer.GetAdornerLayer(_dragScope);
				if (showDragVisual)
				{
					_dragAdorner = new DragAdorner(_dragScope, dragSource, useVisualBrush);
					_layer.Add(_dragAdorner);
					_dragAdorner.UpdatePosition(Mouse.GetPosition(_dragScope), true);
				}

				_dragSource = dragSource;
				IsDragging = true;
				_dragHasLeftScope = false;
				Mouse.OverrideCursor = Cursors.No;
				dragSource.CaptureMouse();
			}
		}