private void ScrollViewerScrollWheelChanged(object sender, ScrollWheelChangedEventArgs args) { var d = args.Delta / 10f; UpdatePosition(new PointF(d, d)); }
protected internal virtual void OnScrollWheelChanged(ScrollWheelChangedEventArgs args) { ScrollWheelChanged?.Invoke(this, args); }
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; } }