我一直在研究有关事件的问题的许多答案,以及它们如何需要用于存储添加的回调的支持委托字段。但是,我仍然非常困惑,这是如何适用于我实现它的方式。以下是我根据问题和答案尝试遵循和实施的确切答案,但无济于事。
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);
}
我试图按照我之前发布的答案,但我很困惑我应该如何检查它们是否为空,然后如果它们是我应该如何调用将实际处理触摸事件的处理程序。
如果需要更多代码来解释问题,请发表评论。谢谢。
为简单起见,即使EventHandler
是null
,也可以安全地删除处理程序。因此:
this.GenericMotion -= HandleGenericMotion;
this.Touch -= HandleTouch;
即使GenericMotion
和/或Touch
是null
,也可以安全地打电话。
请注意,在删除处理程序并在以后重新添加处理程序时,如果触发了某个事件,则不会处理该事件。