浏览代码

Forward pointer wheel event from scrollbar to scrollviewer (#16398)

* forward pointer wheel event from scrollbar to scrollviewer

* raise cloned pointer wheel event in scrollbar

---------

Co-authored-by: Max Katz <[email protected]>
Emmanuel Hansen 1 年之前
父节点
当前提交
4c2d9fcda7
共有 1 个文件被更改,包括 21 次插入0 次删除
  1. 21 0
      src/Avalonia.Controls/Primitives/ScrollBar.cs

+ 21 - 0
src/Avalonia.Controls/Primitives/ScrollBar.cs

@@ -257,6 +257,27 @@ namespace Avalonia.Controls.Primitives
             }
         }
 
+        protected override void OnPointerWheelChanged(PointerWheelEventArgs e)
+        {
+            base.OnPointerWheelChanged(e);
+
+            // We need to handle pointer wheel event to allow scrolling with the pointer wheel. So we raise the event on the scrollviewer's presenter
+            if (!e.Handled && _owner?.Presenter is { } presenter && VisualRoot is Visual root)
+            {
+                e.Handled = true;
+                e = new PointerWheelEventArgs(
+                    this,
+                    e.Pointer,
+                    root,
+                    e.GetPosition(root),
+                    e.Timestamp,
+                    new PointerPointProperties((RawInputModifiers)e.KeyModifiers, PointerUpdateKind.Other),
+                    e.KeyModifiers,
+                    e.Delta);
+                presenter.RaiseEvent(e);
+            }
+        }
+
         protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
         {
             base.OnPropertyChanged(change);