c# - Xamarin Forms 向左滑动/向右滑动手势

标签 c# xaml xamarin xamarin.forms

首先我想说我对移动开发、Xamarin、C#、.Net 完全陌生。

我正在使用 Xamarain Forms 创建一个移动应用程序,但遇到了我无法使用滑动手势的问题,至少根据我看到的文档是这样。

我找到了这个网站:http://arteksoftware.com/gesture-recognizers-with-xamarin-forms/

这描述了如何为 IOS/Android 添加一些额外的手势,以便在表单的上下文中访问。在尝试进行此操作之前,我想看看是否还有其他人在 Xamarin Forms 应用程序中实现了滑动,以及他们是如何实现的。

我的目标是必须有一个水平堆栈布局。此布局包含 7 个按钮,每个按钮反射(reflect)当前一周中的一天。在堆栈布局上向左滑动会将按钮的文本更改为上周。向右滑动会将按钮的文本更改为下周。

所以我也在尝试为此使用 MVVM 和 XAML。那么我可以将向左滑动和向右滑动的 Action 分开吗?我想使用 ICommand 将某个参数传递给基于滑动方向的函数。

我们将不胜感激这方面的任何示例或任何建议。

最佳答案

不需要第三方库..不需要付费..只需添加这两个类并实现您的滑动监听器

第一步:复制粘贴这两个类

SwipeListener.cs

using System;
using Xamarin.Forms;

namespace SwipeLib
{
public class SwipeListener : PanGestureRecognizer
{
    private ISwipeCallBack mISwipeCallback;
    private double translatedX = 0, translatedY = 0;

    public SwipeListener(View view, ISwipeCallBack iSwipeCallBack)
    {
        mISwipeCallback = iSwipeCallBack;
        var panGesture = new PanGestureRecognizer();
        panGesture.PanUpdated += OnPanUpdated;
        view.GestureRecognizers.Add(panGesture);
    }

    void OnPanUpdated(object sender, PanUpdatedEventArgs e)
    {

        View Content = (View)sender;

        switch (e.StatusType) {

            case GestureStatus.Running:

                try {
                    translatedX = e.TotalX;
                    translatedY = e.TotalY;
                } catch (Exception err) {
                    System.Diagnostics.Debug.WriteLine("" + err.Message);
                }
                break;

            case GestureStatus.Completed:

                System.Diagnostics.Debug.WriteLine("translatedX : " + translatedX);
                System.Diagnostics.Debug.WriteLine("translatedY : " + translatedY);

                if (translatedX < 0 && Math.Abs(translatedX) > Math.Abs(translatedY)) {
                    mISwipeCallback.onLeftSwipe(Content);
                } else if (translatedX > 0 && translatedX > Math.Abs(translatedY)) {
                    mISwipeCallback.onRightSwipe(Content);
                } else if (translatedY < 0 && Math.Abs(translatedY) > Math.Abs(translatedX)) {
                    mISwipeCallback.onTopSwipe(Content);
                } else if (translatedY > 0 && translatedY > Math.Abs(translatedX)) {
                    mISwipeCallback.onBottomSwipe(Content);
                } else {
                    mISwipeCallback.onNothingSwiped(Content);
                }

                break;

        }
    }

}
}

ISwipeCallBack.cs

using System;
using Xamarin.Forms;
namespace SwipeLib
{  
public interface ISwipeCallBack
{

    void onLeftSwipe(View view);
    void onRightSwipe(View view);
    void onTopSwipe(View view);
    void onBottomSwipe(View view);
    void onNothingSwiped(View view);
}
}

第 2 步:从您的 Xamarin 表单传递 View 和接口(interface)对象。然后你得到结果

在我的例子中,我传递了标签

 SwipeListener swipeListener = new SwipeListener(lbl_swipe, this);

第三步:实现ISwipeCallBack接口(interface)

public partial class SwipeLibPage : ContentPage, ISwipeCallBack

示例项目 --> https://github.com/rranjithkumar100/Xamarin-Swipe-Library

关于c# - Xamarin Forms 向左滑动/向右滑动手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29972404/

相关文章:

c# - 根据后代节点的属性选择节点的最佳 LINQ-to-XML 查询?

c# - StackPanel 的方向在 ItemsControl (WPF) 中不起作用

xamarin - 如何在Xamarin Forms App上将Google Play开发者API更新到版本3?

c# - 'Microsoft.Jet.OLEDB.4.0' 提供者未在本地机器上注册

c# - 在资源字典中找不到键异常 - Xamarin.Forms

c# - IdentityUser 上的 AuditIgnore - Audit.Net

c# - WPF - ListView 项目边距

WPF UserControl 或 ControlTemplate...(不确定)

android - 设置位置管理器 RequestLocationUpdate

c# - Xamarin Forms 项目的图像位置