zoukankan      html  css  js  c++  java
  • 张高兴的 Xamarin.Forms 开发笔记:TapGestureRecognizer 的简单介绍与应用

      最近很少写应用了,一直在忙关于 ASP.NET 的东西(哈欠...)。抽点时间对 TapGestureRecognizer 做点总结。

      一、简介

      TapGestureRecognizer 就是对 Tap 手势进行识别。 Forms 里的大多数控件都继承自 View 类,而 View 类中有一个公共属性 GestureRecognizers,因此控件都可以添加各种手势识别。当然手势不止 Tap 这一种,更多的可以在 Xamarin 的指南中了解:https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/gestures/

    public IList<IGestureRecognizer> GestureRecognizers { get; }

      

      二、用法

      在说用法之前,首先要搞清楚我们需要关注 Tap 的哪些属性。最重要的还是 Tap 的次数。

      1. Xaml

    <Label Text="0">
        <Label.GestureRecognizers>
            <TapGestureRecognizer NumberOfTapsRequired="1" Tapped="TapGestureRecognizer_Tapped" />
        </Label.GestureRecognizers>
    </Label>

      直接上代码,这里以 Label 举例,最最基本的用法都在这了,用 NumberOfTapsRequired 设置点击数, Tapped 绑定监听事件。对于 MVVM 涉及的绑定,可以去官方找找。

      2. C# 代码

    var tapGestureRecognizer = new TapGestureRecognizer();
    
    tapGestureRecognizer.NumberOfTapsRequired = 1;
    tapGestureRecognizer.Tapped += (s, e) =>
    {
        // TODO
    };
    
    YourControl.GestureRecognizers.Add(tapGestureRecognizer);

      

      三、应用

      写了一个小小的 Demo (GitHub:https://github.com/ZhangGaoxing/xamarin-forms-demo/tree/master/GestureRecognizersDemo

      1. 超链接

      Forms 里是没有超链接的,有时候就很头疼。我顺便看了一下 Xaml Standard 的第一版草稿,里面还是没有超链接。可以用 TapGestureRecognizer 去仿制一个。这里就以 Label 跳转邮件链接和 Image 跳转网页链接举例。

      Xaml 代码

    <Label Text="Hyperlinks" FontSize="20" TextColor="Black" />
    <StackLayout Orientation="Horizontal">
        <Label Text="Text : " VerticalTextAlignment="Center" />
        <Label x:Name="Email" Text="zhangyuexin121@live.cn" VerticalTextAlignment="Center" TextColor="DodgerBlue"/>
    </StackLayout>
    <StackLayout Orientation="Horizontal">
        <Label Text="Image : " VerticalTextAlignment="Center" />
        <Image x:Name="Weibo" Source="weibo.png" HeightRequest="35" WidthRequest="35" VerticalOptions="Center" />
    </StackLayout>

      C# 代码

    var tapGestureRecognizer = new TapGestureRecognizer();
    // 设置触发点击数
    tapGestureRecognizer.NumberOfTapsRequired = 1;
    tapGestureRecognizer.Tapped += (s, e) =>
    {
        if (s is Label)
        {
            Device.OpenUri(new Uri("mailto:zhangyuexin121@live.cn"));
        }
        else if (s is Image)
        {
            Device.OpenUri(new Uri("http://www.weibo.com/279639933"));
        }
    };
    
    Email.GestureRecognizers.Add(tapGestureRecognizer);
    Weibo.GestureRecognizers.Add(tapGestureRecognizer);

      2. 为没有 Clicked 事件的控件添加假的 Clicked 事件

      换句大白话来说,就是点击一个控件触发一个事件。这里以 Label 举例,点击 Label 以“0”和“1”变化。

      Xaml 代码

    <Label Text="Fake Click Event" FontSize="20" TextColor="Black" />
    <Label Text="0" FontSize="18" FontAttributes="Bold" TextColor="Black">
        <Label.GestureRecognizers>
            <TapGestureRecognizer NumberOfTapsRequired="1" Tapped="TapGestureRecognizer_Tapped" />
        </Label.GestureRecognizers>
    </Label>

      C# 代码

    private void TapGestureRecognizer_Tapped(object sender, EventArgs e)
    {
        Label label = sender as Label;
    
        string val = label.Text;
        switch (val)
        {
            case "0":
                label.Text = "1";
                label.TextColor = Color.FromHex("#2196F3");
                break;
            case "1":
                label.Text = "0";
                label.TextColor = Color.Black;
                break;
            default:
                break;
        }
    }

      3. 效果图

  • 相关阅读:
    cocos2d-x笔记5: 通过jni实现C++调用Java
    cocos2d-x笔记4: TextField不能删除内容,以及我的解决办法。。。
    C++ 11 笔记 (六) : 随机数
    C++ 11 笔记 (五) : std::thread
    C++ 11 笔记 (四) : std::bind
    C++ 11 笔记 (三) : auto
    C++ 11 笔记 (二) : for循环
    要做的题目
    【C补充】结构体的内存分配,匈牙利命名法
    【C补充】文件操作
  • 原文地址:https://www.cnblogs.com/zhanggaoxing/p/7892791.html
Copyright © 2011-2022 走看看