Xamarin.Forms手势识别器 - 事件'View.GenericMotion'只能出现在+ =或 - =的左侧

问题描述 投票:0回答:1

我一直在研究有关事件的问题的许多答案,以及它们如何需要用于存储添加的回调的支持委托字段。但是,我仍然非常困惑,这是如何适用于我实现它的方式。以下是我根据问题和答案尝试遵循和实施的确切答案,但无济于事。

https://stackoverflow.com/a/41641881/8065149

总的来说,我试图在Xamarin和Android中为自定义地图渲染添加自定义手势。我希望能够在点击并按住时将一个图钉添加到我的地图中。我目前已经想出如何通过水龙头添加引脚,但我想将其更改为长按。下面是我用来尝试向我的项目添加手势的教程,因为它看起来很有前途(即使他的网站不安全)。在网站下面是github项目,以便更容易理解。

https://arteksoftware.com/gesture-recognizers-with-xamarin-forms/ https://github.com/RobGibbens/XamarinFormsGestureRecognizers

以下是有问题的代码。具体来说,两行if (this.GenericMotion != null)if (this.Touch != null)。这两行都抛出错误:The event 'View.GenericMotion' can only appear on the left hand side of += or -=

    protected override void OnElementChanged (ElementChangedEventArgs<Label> e)
    {
        base.OnElementChanged (e);

        if (e.NewElement == null) {
            if (this.GenericMotion != null) {
                this.GenericMotion -= HandleGenericMotion;
            }
            if (this.Touch != null) {
                this.Touch -= HandleTouch;
            }
        }

        if (e.OldElement == null) {
            this.GenericMotion += HandleGenericMotion;
            this.Touch += HandleTouch;
        }
    }

    void HandleTouch(object sender, TouchEventArgs e)
    {
        _detector.OnTouchEvent(e.Event);
    }

    void HandleGenericMotion(object sender, GenericMotionEventArgs e)
    {
        _detector.OnTouchEvent(e.Event);
    }

我试图按照我之前发布的答案,但我很困惑我应该如何检查它们是否为空,然后如果它们是我应该如何调用将实际处理触摸事件的处理程序。

如果需要更多代码来解释问题,请发表评论。谢谢。

c# events xamarin.forms xamarin.android event-handling
1个回答
0
投票

为简单起见,即使EventHandlernull,也可以安全地删除处理程序。因此:

this.GenericMotion -= HandleGenericMotion;
this.Touch -= HandleTouch;

即使GenericMotion和/或Touchnull,也可以安全地打电话。

请注意,在删除处理程序并在以后重新添加处理程序时,如果触发了某个事件,则不会处理该事件。

© www.soinside.com 2019 - 2024. All rights reserved.