如何在Avalonia FuncUI中无需反射访问PointerPressedEventArgs受保护成员
解决方案
替代反射的简洁实现
你不需要用反射来获取指针属性,Avalonia的PointerPressedEventArgs本身提供了公开的GetCurrentPoint方法,可以直接获取包含按钮状态的PointerPoint对象,进而拿到PointerPointProperties。修改后的代码如下:
open Avalonia.FuncUI open Avalonia.Input ctx.attrs [ Component.onPointerPressed (fun event -> let pointerPoint = event.GetCurrentPoint(null) // 传入null获取主设备的指针点 if pointerPoint.Properties.IsXButton1Pressed then DoSomething() ) ]
这段代码通过框架公开API完成了相同功能,避免了反射带来的维护风险和性能损耗,完全符合官方设计规范。
是否需要提交GitHub Issue?
如果希望FuncUI提供更直观的封装(比如类似onMouseBackButtonPressed的直接回调属性),可以在FuncUI的GitHub仓库提交Feature Request。这样后续用户无需手动判断按钮状态,直接使用封装好的API即可。但从当前功能实现的角度来说,使用Avalonia原生公开API已经是简洁合规的方案,不存在必须修复的问题。
内容的提问来源于stack exchange,提问作者GMc
相关产品推荐
相关产品推荐

