如何从Avalonia.FuncUI中的事件中获得点击位置



我正试图弄清楚如何从事件点击中访问鼠标点击的指针位置。我想出了类似的东西

[...]
type State = { coords: Point list }
type Msg = Click of Point
let update (msg: Msg) (state: State) : State =
match msg with
| Click p -> { state with coords = p::state.coords }

let view (state: State) dispatch =
Canvas.create [
Canvas.onPointerPressed (fun event -> event.GetPosition ??? |> Click |> dispatch)
]
[...]

但这需要一个控件的句柄来代替,我无法访问。还有别的办法吗?或者是一种控制手柄的方法?

也许我错过了什么。

您可以使用PointerPressedEventArgs(或任何其他RoutedEventArgs(上的Source属性来获取对激发控件的引用。

let view (state: State) dispatch =
Canvas.create [
Canvas.background "white"
Canvas.onPointerPressed (fun event -> event.GetPosition (event.Source :?> IVisual) |> Click |> dispatch)
Canvas.children [
for point in state.coords do
yield Ellipse.create [
Ellipse.width 5.0
Ellipse.height 5.0
Ellipse.fill "red"
Ellipse.top (point.Y - 2.5)
Ellipse.left (point.X - 2.5)
]
]
]

还要注意,您需要设置CanvasBackground属性,否则将不会得到PointerPressed事件。

如果要使用上面的示例(因为Ellipse(,还需要打开Avalonia.Controls.Shapes命名空间。

最新更新