windows phone(8.1 和 10)平台的 Xamarin Forms 中的滑动手势识别器

Swipe gesture recognizer in Xamarin Forms for windows phone (8.1 & 10) platform

如何在 windows phone (8.1 & 10) 平台的 Xamarin Forms 中最好地实现滑动 gesture recognizer

我看到很多 renderers 的例子都是为 Android 和 iOS 平台做的。但不适用于 WinRT 或 UWP。

I see a lot of examples for renderers that do that for Android and iOS platform. But not for WinRT or UWP.

目前 Xamarin.Forms 没有这样的 "SwipeGestureRecognizer" api。但您可以根据 PanGestureRecognizer 自定义 SwipeGestureRecognizer。我编写了以下用于模拟 "SwipeGestureRecognizer" 的代码。但我使用的阈值只是为了测试而不是真正的阈值,你可以根据你的需要修改阈值。

public enum SwipeDeriction
{
    Left = 0,
    Rigth,
    Above,
    Bottom
}

public class SwipeGestureReconginzer : PanGestureRecognizer
{
    public delegate void SwipeRequedt(object sender, SwipeDerrictionEventArgs e);

    public event EventHandler<SwipeDerrictionEventArgs> Swiped;

    public SwipeGestureReconginzer()
    {
        this.PanUpdated += SwipeGestureReconginzer_PanUpdated;
    }

    private void SwipeGestureReconginzer_PanUpdated(object sender, PanUpdatedEventArgs e)
    {
        if (e.TotalY > -5 | e.TotalY < 5)
        {
            if (e.TotalX > 10)
            {
                Swiped(this, new SwipeDerrictionEventArgs(SwipeDeriction.Rigth));
            }
            if (e.TotalX < -10)
            {
                Swiped(this, new SwipeDerrictionEventArgs(SwipeDeriction.Left));
            }
        }

        if (e.TotalX > -5 | e.TotalX < 5)
        {
            if (e.TotalY > 10)
            {
                Swiped(this, new SwipeDerrictionEventArgs(SwipeDeriction.Bottom));
            }
            if (e.TotalY < -10)
            {
                Swiped(this, new SwipeDerrictionEventArgs(SwipeDeriction.Above));
            }
        }
    }
}

public class SwipeDerrictionEventArgs : EventArgs
{
    public SwipeDeriction Deriction { get; }

    public SwipeDerrictionEventArgs(SwipeDeriction deriction)
    {
        Deriction = deriction;
    }
}

MainPage.xaml.cs

  var swipe = new SwipeGestureReconginzer();
  swipe.Swiped += Tee_Swiped;
  TestLabel.GestureRecognizers.Add(swipe);

  private void Tee_Swiped(object sender, SwipeDerrictionEventArgs e)
  {
      switch (e.Deriction)
      {
          case SwipeDeriction.Above:
              {
              }
              break;

          case SwipeDeriction.Left:
              {
              }
              break;

          case SwipeDeriction.Rigth:
              {
              }
              break;

          case SwipeDeriction.Bottom:
              {
              }
              break;

          default:
              break;
      }
  }