private void ScrollViewerScrollWheelChanged(object sender, ScrollWheelChangedEventArgs args)
        {
            var d = args.Delta / 10f;

            UpdatePosition(new PointF(d, d));
        }
Beispiel #2
0
 protected internal virtual void OnScrollWheelChanged(ScrollWheelChangedEventArgs args)
 {
     ScrollWheelChanged?.Invoke(this, args);
 }
Beispiel #3
0
        internal void Update()
        {
            if (!Initialized)
            {
                InvalidateLayout(true);
                Initialized = true;
            }

            var           mouseState = Mouse.GetState();
            TouchLocation touchState;
            var           touchCollection = TouchPanel.GetState();

            if (touchCollection.Count > 0)
            {
                touchState = touchCollection[0];
            }
            var touchPosition = (PointF)touchState.Position.ToPoint();
            var mousePosition = (PointF)mouseState.Position;

            Control content;

            if (FlyOut != null)
            {
                content = FlyOut;
            }
            else
            {
                content = _mainGrid;
            }

            if (mousePosition != LastMousePosition)
            {
                List <MouseButton> buttons = new List <MouseButton>();
                if (mouseState.LeftButton == ButtonState.Pressed)
                {
                    buttons.Add(MouseButton.Left);
                }
                if (mouseState.RightButton == ButtonState.Pressed)
                {
                    buttons.Add(MouseButton.Right);
                }
                if (mouseState.MiddleButton == ButtonState.Pressed)
                {
                    buttons.Add(MouseButton.Middle);
                }
                var args = new MouseEventArgs(mousePosition, buttons);
                VisualTreeHelper.IterateVisualTree(content, args,
                                                   (c, a) => c.BoundingRect.Contains(a.Position) && !c.BoundingRect.Contains(LastMousePosition), (c, a) => { c.OnMouseEnter(a); }, (c, a) => c.BoundingRect.Contains(a.Position));
                VisualTreeHelper.IterateVisualTree(content, args, (c, a) => c.BoundingRect.Contains(a.Position) && c.BoundingRect.Contains(LastMousePosition), (c, a) => { c.OnMouseMove(a); }, null);
                VisualTreeHelper.IterateVisualTree(content, args, (c, a) => !c.BoundingRect.Contains(a.Position) && c.BoundingRect.Contains(LastMousePosition), (c, a) => { c.OnMouseLeave(a); }, (c, a) => c.BoundingRect.Contains(LastMousePosition));
                LastMousePosition = mousePosition;
            }

            HandleMouseButton(mouseState.LeftButton, ButtonState.Pressed, MouseButton.Left, mousePosition, content, (c, a) => c.OnMouseDown(a));
            HandleMouseButton(mouseState.LeftButton, ButtonState.Released, MouseButton.Left, mousePosition, content, (c, a) => c.OnMouseUp(a));
            HandleMouseButton(mouseState.RightButton, ButtonState.Pressed, MouseButton.Right, mousePosition, content, (c, a) => c.OnMouseDown(a));
            HandleMouseButton(mouseState.RightButton, ButtonState.Released, MouseButton.Right, mousePosition, content, (c, a) => c.OnMouseUp(a));
            HandleMouseButton(mouseState.MiddleButton, ButtonState.Pressed, MouseButton.Middle, mousePosition, content, (c, a) => c.OnMouseDown(a));
            HandleMouseButton(mouseState.MiddleButton, ButtonState.Released, MouseButton.Middle, mousePosition, content, (c, a) => c.OnMouseUp(a));
            if (mouseState.ScrollWheelValue != LastScrollWheelValue)
            {
                var args = new ScrollWheelChangedEventArgs(mousePosition, mouseState.ScrollWheelValue - LastScrollWheelValue);

                VisualTreeHelper.IterateVisualTree(content, args, (c, a) => c.BoundingRect.Contains(a.Position), (c, a) => { c.OnScrollWheelChanged(a); }, null);

                LastScrollWheelValue = mouseState.ScrollWheelValue;
            }


            if (touchState.State == TouchLocationState.Pressed)
            {
                var args = new TouchEventArgs(touchPosition);
                VisualTreeHelper.IterateVisualTree(content, args,
                                                   (c, a) => c.BoundingRect.Contains(a.Position),
                                                   (c, a) => { c.OnTouchDown(a); },
                                                   null
                                                   );
                LastTouchPosition = touchPosition;
            }
            if (touchState.State == TouchLocationState.Released)
            {
                var args = new TouchEventArgs(touchPosition);
                VisualTreeHelper.IterateVisualTree(content, args,
                                                   (c, a) => c.BoundingRect.Contains(a.Position),
                                                   (c, a) => { c.OnTouchUp(a); },
                                                   null
                                                   );
            }
            if (touchState.State == TouchLocationState.Moved && touchPosition != LastTouchPosition)
            {
                var args = new TouchEventArgs(touchPosition);
                VisualTreeHelper.IterateVisualTree(content, args,
                                                   (c, a) => c.BoundingRect.Contains(a.Position) || c.BoundingRect.Contains(LastTouchPosition),
                                                   (c, a) =>
                {
                    if (c.BoundingRect.Contains(a.Position))
                    {
                        c.OnTouchMove(a);
                    }
                    else
                    {
                        c.OnTouchCancel(a);
                    }
                },
                                                   null
                                                   );
                LastTouchPosition = touchPosition;
            }
        }