SuperAPI AI 工具集

avalonia-input-interaction

编程与开发

查看项目

更新于 11-03 16:15

技能介绍

该技能用于在 Avalonia 11.3 与 12.x 中处理指针事件、键盘输入、手势、焦点、拖放和热键。文档使用版本标签:标注 12.0+ 的仅适用 12.x,标注 11.x 的仅适用 11.x,未标注的适用于全部版本。

指针与键盘:所有输入以路由事件形式分发,默认冒泡,带 Preview 前缀的为隧道事件。指针事件统一覆盖鼠标、触摸和触控笔。指针相关事件包括 PointerPressed、PointerReleased、PointerMoved、PointerEntered、PointerExited、PointerCaptureLost、Tapped、DoubleTapped、RightTapped,可通过 GetPosition 与 GetCurrentPoint(...).Properties 判断左右中键,也可通过 Pointer.Capture 捕获指针、通过 Pointer.Type 判断 Touch 或 Pen。键盘事件包括 KeyDown、KeyUp、TextInput,可用 KeyModifiers 组合判断组合键。

热键与焦点:热键可在 XAML 中用 HotKey 属性注册,也可用 HotKeyManager.RegisterHotKey / SetHotKey 在代码中注册,设为 null 可注销。焦点可通过 Focus(NavigationMethod.Tab) 或 FocusManager 设置,XAML 中用 IsTabStop、TabIndex 控制,没有 AutoFocus 属性,需在控件附加到可视化树后调用。12.0+ 提供公开的 IFocusManager 焦点遍历 API、可取消的 GettingFocus/LosingFocus、FocusChangedEventArgs,以及 FocusManager.IsFocusScope 焦点范围;11.x 的 KeyboardNavigationHandler.GetNext 在 12 中移除。样式可用 :focus 与 :focus-visible 伪类。

手势:Tapped、RightTapped、DoubleTapped、Holding 直接在 InputElement 上触发;触摸手势需在 GestureRecognizers 中添加对应识别器(如 PinchGestureRecognizer、ScrollGestureRecognizer、PullGestureRecognizer),再处理 Pinch、PullGesture、ScrollGesture、SwipeGesture、PointerTouchPadGestureMagnify/Rotate/Swipe 等事件。12.0+ 直接使用 Pinch="...",11.x 使用 Gestures.Pinch。

拖放与光标:12.0+ 使用 DataTransferItem、DataFormat、DataTransfer 与 DragDrop.DoDragDropAsync,目标端通过 DragDrop.AllowDrop 及 DragOver/Drop 等事件处理,并用 TryGetText、TryGetFiles、TryGetValue 读取数据;11.x 使用 DataObject、DataFormats 与 DoDragDrop。光标可通过 Cursor 属性设置内置值,或用位图与热点创建自定义 Cursor。滚轮事件为 PointerWheelChanged,通过 e.Delta 获取方向与幅度。

限制与常见错误:未设置 e.Handled 会导致事件继续冒泡;拖放调用必须在指针事件处理器中,await 之后会丢失上下文;在控件附加前调用 Focus() 无效;触摸手势需识别器,而 Tapped 等不需要;12.0+ 移除了 Gestures 前缀、DataObject/DataFormats/e.Data 以及触摸按下即选中的行为;DragDrop.AllowDrop 需设置在投放目标上。