public override void PreprocessMouseDown()

in src/MiddleClickScroll/MiddleClickScroll.cs [76:128]


        public override void PreprocessMouseDown(MouseButtonEventArgs e)
        {
            if (_location.HasValue)
            {
                //The user didn't move enough so we didn't stop scrolling when they released the mouse.
                //Release it now (on any mouse down).
                this.StopScrolling();

                e.Handled = true;
            }
            else if (e.ChangedButton == System.Windows.Input.MouseButton.Middle)
            {
                if ((!_view.IsClosed) && _view.VisualElement.IsVisible)
                {
                    if (_view.VisualElement.CaptureMouse())
                    {
                        _oldCursor = _view.VisualElement.Cursor;
                        _view.VisualElement.Cursor = Cursors.ScrollAll;

                        Point position = e.GetPosition(_view.VisualElement);
                        _location = _view.VisualElement.PointToScreen(position);

                        if (_zeroPointImage == null)
                        {                                                                             //IMAGE_CURSOR      LR_CREATEDDIBSECTION   LR_SHARED
                            IntPtr hScrollAllCursor = User32.LoadImage(IntPtr.Zero, new IntPtr(32512 + 142), (uint)2, 0, 0, (uint)(0x00002000 | 0x00008000));
                            BitmapSource source = Imaging.CreateBitmapSourceFromHIcon(hScrollAllCursor, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
                            source.Freeze();

                            _zeroPointImage = new Image();
                            _zeroPointImage.Source = source;

                            _zeroPointImage.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));

                            _zeroPointImage.Opacity = 0.5;
                        }

                        Canvas.SetLeft(_zeroPointImage, _view.ViewportLeft + position.X - _zeroPointImage.DesiredSize.Width * 0.5);
                        Canvas.SetTop(_zeroPointImage, _view.ViewportTop + position.Y - _zeroPointImage.DesiredSize.Height * 0.5);

                        _layer.AddAdornment(AdornmentPositioningBehavior.ViewportRelative, null, null, _zeroPointImage, null);

                        _lastMoveTime = DateTime.Now;

                        Debug.Assert(_moveTimer == null);
                        _moveTimer = new DispatcherTimer(new TimeSpan(0, 0, 0, 0, (int)minTime), DispatcherPriority.Normal, OnTimerElapsed, _view.VisualElement.Dispatcher);

                        _dismissOnMouseUp = false;

                        e.Handled = true;
                    }
                }
            }
        }