예제 #1
0
        public void MouseDeviceCaptureTest()
        {
            Border child1 = new Border {
                Background = Brushes.Transparent, Width = 100, Height = 100
            };
            Border child2 = new Border {
                Background = Brushes.Transparent, Width = 100, Height = 100
            };
            Border child3 = new Border {
                Background = Brushes.Transparent, Width = 100, Height = 100
            };

            StackPanel panel = new StackPanel {
                IsRootElement = true
            };

            panel.Children.Add(child1);
            panel.Children.Add(child2);

            MouseEventArgs lastArgs = null;

            panel.MouseMove += (sender, e) => lastArgs = e;

            TestPresentationSource presentationSource = new TestPresentationSource();

            presentationSource.RootElement = panel;

            panel.Measure(Size.Infinity);
            panel.Arrange(new Rect(panel.DesiredSize));

            MouseDevice mouseDevice = new MouseDevice(presentationSource);

            mouseDevice.Activate();
            mouseDevice.ProcessRawEvent(new RawMouseEventArgs(new Point(50, 50), 0));
            Assert.AreEqual(child1, lastArgs.Source);
            Assert.AreEqual(child1, mouseDevice.HitTarget);
            Assert.AreEqual(null, mouseDevice.CaptureTarget);
            Assert.AreEqual(child1, mouseDevice.Target);

            mouseDevice.ProcessRawEvent(new RawMouseEventArgs(new Point(50, 150), 0));
            Assert.AreEqual(child2, lastArgs.Source);
            Assert.AreEqual(child2, mouseDevice.HitTarget);
            Assert.AreEqual(null, mouseDevice.CaptureTarget);
            Assert.AreEqual(child2, mouseDevice.Target);

            mouseDevice.Capture(child2);
            mouseDevice.ProcessRawEvent(new RawMouseEventArgs(new Point(50, 50), 0));
            Assert.AreEqual(child2, lastArgs.Source);
            Assert.AreEqual(child1, mouseDevice.HitTarget);
            Assert.AreEqual(child2, mouseDevice.CaptureTarget);
            Assert.AreEqual(child2, mouseDevice.Target);

            mouseDevice.ReleaseCapture();
            mouseDevice.ProcessRawEvent(new RawMouseEventArgs(new Point(50, 50), 0));
            Assert.AreEqual(child1, lastArgs.Source);
            Assert.AreEqual(child1, mouseDevice.HitTarget);
            Assert.AreEqual(null, mouseDevice.CaptureTarget);
            Assert.AreEqual(child1, mouseDevice.Target);
        }
예제 #2
0
 private void CaptureMouse()
 {
     if (!_mouseCaptured)
     {
         _mouseDevice.Capture(_wpfTextView.VisualElement);
         _mouseCaptured         = true;
         _scrollTimer.IsEnabled = true;
     }
 }
예제 #3
0
        //</SnippetMouseClickCountDoubleClick>



        private void CaptureMouseOnMouseEnter(object sender, MouseEventArgs e)
        {
            MouseDevice mDevice = e.MouseDevice;
            bool        captureResult;

            captureResult = mDevice.Capture(captureTarget);

            if (captureResult == true)
            {
                captureTarget.BorderBrush = Brushes.Red;
            }
        }
예제 #4
0
        protected virtual bool BeginDragOperation(InputDevice deviceToCapture, Point initialDragPosition)
        {
            // This is a helper method that provides for easy dragging of the
            // LoopPanel's Offset using the Mouse. It can be overridden to provide
            // support for other input devices like a Surface Contact.
            bool result = false;

            if (CapturedDevice == null)
            {
                _lastDragPosition = initialDragPosition;
                if (deviceToCapture is MouseDevice)
                {
                    MouseDevice md = deviceToCapture as MouseDevice;

                    if (md.Captured != null)
                    {
                        md.Captured.ReleaseMouseCapture();
                    }

                    // By default, we support dragging via the left mouse button.
                    // If another button is required for dragging, this method should be overridden.
                    if (md.Captured == null && md.LeftButton == MouseButtonState.Pressed)
                    {
                        CapturedDevice = md;
                        md.Capture(this);
                        result = true;
                    }
                }
                else if (deviceToCapture is TouchDevice)
                {
                    TouchDevice td = deviceToCapture as TouchDevice;

                    if (td.Captured != null)
                    {
                        this.ReleaseTouchCapture(td);
                    }

                    // By default, we support dragging via the left touch button.
                    // If another button is required for dragging, this method should be overridden.
                    if (td.Captured == null)
                    {
                        CapturedDevice = td;
                        td.Capture(this);
                        result = true;
                    }
                }
            }
            return(result);
        }
예제 #5
0
        public void Capture_Is_Cleared_When_Control_Removed()
        {
            Canvas control;
            var    root = new TestRoot
            {
                Child = control = new Canvas(),
            };
            var target = new MouseDevice();

            target.Capture(control);
            Assert.Same(control, target.Captured);

            root.Child = null;

            Assert.Null(target.Captured);
        }
 void ReleaseMouse()
 {
     mouseDevice?.Capture(null);
     _tabContext.Left = _tabContext.OX;
     _tabContext.Top  = _tabContext.OY;
 }
 void ReleaseMouse()
 {
     mouseDevice?.Capture(null);
     _tabContext.X     =
         _tabContext.Y = _tabContext.Radius;
 }