Как получить позицию клика от события в Avalonia.FuncUI - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь выяснить, как я могу получить доступ к позиции указателя щелчка мыши по событию click. Я придумал что-то вроде

[...]
    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)
         ]
[...]

Но для этого потребовалась бы ручка для элемента управления вместо ??? , к которому у меня нет доступа. Есть ли другой способ? Или способ получить ручку для элемента управления?

Возможно, я что-то упустил.

1 Ответ

0 голосов
/ 26 февраля 2020

Вы можете использовать свойство Source в PointerPressedEventArgs (или любом другом RoutedEventArgs), чтобы получить ссылку на Управление стрельбой.

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)
                 ]
         ]
    ]

Также обратите внимание, что вам нужно установить Background Свойство Canvas или вы не получите PointerPressed событий.

Вам также необходимо открыть пространство имен Avalonia.Controls.Shapes, если вы хотите использовать приведенный выше пример (из-за Ellipse ).

...