【问题标题】:Xamarin view - Error on re-adding gesture recognizerXamarin 视图 - 重新添加手势识别器时出错
【发布时间】:2017-01-20 00:31:56
【问题描述】:

在我的 Xamarin 应用程序中,基于状态,我需要向 Xamarin Forms 视图添加或删除平移/捏合手势识别器。这是一些伪代码:

public void enableGestures(Xamarin.Forms.View v, bool isEnable) {

   if (isEnable) {
      pinchgr += OnViewPinched;
      pangr += OnViewPanned;
      v.GestureRecognizers.Add(pinchgr);
      v.GestureRecognizers.Add(pangr);
   }else {
      pinchgr -= OnViewPinched;
      pangr -= OnViewPanned;
      v.GestureRecognizers.Remove(pinchgr);
      v.GestureRecognizers.Remove(pangr);
   }
}

第一次,添加手势识别器可以正常工作。即使稍后删除它们也可以正常工作。但是,当我再次尝试添加它们时,我得到一个无效的操作异常“集合已修改;枚举操作可能无法执行。”

想知道是否有人知道如何克服这个问题。问候。

【问题讨论】:

  • 你能显示真实代码而不是伪代码吗?不知道你为什么要做“pinchgr += OnViewPinched; pangr += OnViewPanned;”和“pinchgr -= OnViewPinched; pangr -= OnViewPanned;”
  • 您能在枚举的View 循环中调用enableGestures 吗?即stackoverflow.com/a/605390/4984832 如果没有您如何执行此操作的完整上下文,任何答案都只是猜测,但底线是枚举和修改同一个集合通常是不允许的。

标签: xamarin xamarin.forms


【解决方案1】:

看起来您正在从一个循环中修改一个可枚举的集合。

不要循环遍历 IEnumerable,而是循环遍历它的 .ToList() 或 .ToArray() 版本。

【讨论】:

  • 感谢大家的帮助。尽管我没有进行任何枚举,但我认为您走在正确的轨道上。在我添加新识别器时,Xamarin 必须枚举所有识别器。因此出现了问题。
猜你喜欢
  • 2019-03-27
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多