SKCanvasView 事件参数仅包含 Pressed 动作类型

SKCanvasView event args contains only Pressed action type

我的示例自定义控件继承自 SKCanvaView 并覆盖了 OnTouch 方法。它简单地打印到调试流操作类型中,但是,操作类型始终是 Pressed.

的类型

根据我的理解,我应该得到像 PressedReleasedMovedCancel 这样的操作类型。 为什么我得到 Pressed 操作类型?

版本信息:

Xamarin.Forms v5.0.0.2012
SkiaSharp.Views.Forms v2.80.2

在 Hyper-V 中使用 Android 设备 运行 以及物理设备进行了测试,结果相同。

using SkiaSharp.Views.Forms;

namespace PurpleBlue.MobileApp.Controls
{
    public class SampleControl : SKCanvasView
    {
        public SampleControl()
        {
            EnableTouchEvents = true;
        }

        protected override void OnTouch(SKTouchEventArgs e)
        {
            System.Diagnostics.Debug.WriteLine($"SampleControl: {e.ActionType}");
        }
    }
}

输出

[ViewRootImpl] ViewRoot's Touch Event : ACTION_DOWN
[0:] SampleControl: Pressed
[ViewRootImpl] ViewRoot's Touch Event : ACTION_UP
[ViewRootImpl] ViewRoot's Touch Event : ACTION_DOWN
[0:] SampleControl: Pressed
[ViewRootImpl] ViewRoot's Touch Event : ACTION_UP
[ViewRootImpl] ViewRoot's Touch Event : ACTION_DOWN
[0:] SampleControl: Pressed
[ViewRootImpl] ViewRoot's Touch Event : ACTION_UP

视图中使用的控件

<controls:SampleControl 
    Grid.Row="1"
    HorizontalOptions="Center"
    HeightRequest="60"
    WidthRequest="120"
    BackgroundColor="Aqua"
/>

细节决定成败,必须在事件处理程序中标记为已处理。一旦完成,奇迹就会发生,应用程序会正确处理剩余的操作类型。 事件处理程序的正确版本如下。

protected override void OnTouch(SKTouchEventArgs e)
{
    System.Diagnostics.Debug.WriteLine($"SampleControl: {e.ActionType}, mouse: {e.MouseButton}");

    e.Handled = true;
}