错误无法将类型'TouchTracking.TouchTrackingPoint'隐式转换为'Xamarin.Forms.Point'

时间:2019-08-01 09:47:07

标签: xamarin skiasharp

我想使用Skiapsharp将Xamarin.Forms指向像素。但是错误只是说我不能“无法将类型'TouchTracking.TouchTrackingPoint'隐式转换为'Xamarin.Forms.Point'”。我关注在线文档,但仍然无法做到。

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/transforms/touch

    void OnTouchEffectAction(object sender, TouchActionEventArgs args)
    {
        Point pt = args.Location; //error occur here

        SKPoint point =
            new SKPoint((float)(canvasView.CanvasSize.Width * pt.X / canvasView.Width),
                        (float)(canvasView.CanvasSize.Height * pt.Y / canvasView.Height));

        switch (args.Type)
        {
            case TouchActionType.Pressed:
                DisplayAlert("Alert", "X: " + args.Location.X + "Y: " + args.Location.Y, "OK");
                break;

        }
    }

1 个答案:

答案 0 :(得分:-1)

这很清楚。

  • args.Location类型为“ TouchTracking.TouchTrackingPoint”
  • pt的类型为“ Xamarin.Forms.Point”

您不能将一种类型的变量分配给另一种类型的变量。

如果TouchTrackingPoint和Point是相关的(TouchTrackingPoint继承自Point或两者均来自同一基础),则可以尝试以下操作:

  

Point pt =(Xamarin.Forms.Point)args.Location; //明确告诉​​编译器可以将一种类型转换为另一种类型。如果类型不兼容,则会生成编译器错误。

如果类型不兼容,则必须为pt创建一个新点,并将args.Location中的X和Y坐标传递给Point的构造函数。

作为另一种选择,您可以完全删除pt。您只需要args.Location的X和Y坐标即可。访问它们就像访问pt的X和Y值一样容易。


这是处理不同类型变量的常见现象,并且不是特定于Xamarin或SkiaSharp。

这是您必须使用任何强制类型的语言来处理的。根据语言的不同,您会在编译时遇到类型错误(在这种情况下),或者在运行时遇到类型错误。

它迫使您考虑是否可以真正地将值从一种类型的变量分配给另一种类型的变量。