You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:52:42