C#为视觉工作室的用户交互添加额外的点击

时间:2015-02-19 15:22:14

标签: c# visual-studio-2013 windows-runtime windows-phone-8.1 mobile-application

我希望在c#中的操作中为手势交互添加两个额外的点击。用户可以在显示消息的屏幕上点击一次..我该如何制作以便用户必须在屏幕上点击三次才能显示相同的消息?我是C#的新手,任何帮助将不胜感激。

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Runtime.InteropServices.WindowsRuntime;
    using Windows.Foundation;
    using Windows.Foundation.Collections;
    using Windows.UI.Input;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Controls.Primitives;
    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Input;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;


    namespace GesturesWP8._1
    {
     /// <summary>
    /// An empty page that can be used on its own or navigated to within a         Frame.
    /// </summary>
    public sealed partial class MainPage : Page
   {
     GestureRecognizer gestureRecognizer = new    Windows.UI.Input.GestureRecognizer();
    Windows.UI.Xaml.UIElement element;
    public MainPage()
    {
        this.InitializeComponent();
        this.Loaded += Page_Loaded;
        this.Unloaded += Page_Unloaded;
    }
    private void Page_Loaded(object sender, RoutedEventArgs e)
    {
        //For making gestures operations on Grid named as 'LayoutRoot'
        GestureInputProcessor(gestureRecognizer, LayoutRoot);
    }
    private void Page_Unloaded(object sender, RoutedEventArgs e)
    {
        //Remove event handlers of gesture recognizer events
        gestureRecognizer.Tapped -= gestureRecognizer_Tapped;  
    }
    public void GestureInputProcessor(Windows.UI.Input.GestureRecognizer gr, Windows.UI.Xaml.UIElement target)
    {
        this.gestureRecognizer = gr;
        //Targeted Ui element to be performing gestures on it.
        this.element = target;

        //Enable gesture settings for Tap
        this.gestureRecognizer.GestureSettings = Windows.UI.Input.GestureSettings.Tap;
        // Set up pointer event handlers. These receive input events that are used by the gesture recognizer.
        this.element.PointerCanceled += OnPointerCanceled;
        this.element.PointerPressed += OnPointerPressed;
        this.element.PointerReleased += OnPointerReleased;
        this.element.PointerMoved += OnPointerMoved;

        // Set up event handlers to respond to gesture recognizer output

        gestureRecognizer.Tapped += gestureRecognizer_Tapped;   
    }

    //Pointer Events
    void OnPointerPressed(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs args)
    {
        // Route teh events to the gesture recognizer
        this.gestureRecognizer.ProcessDownEvent(args.GetCurrentPoint(this.element));
        // Set the pointer capture to the element being interacted with
        this.element.CapturePointer(args.Pointer);
        // Mark the event handled to prevent execution of default handlers
        args.Handled = true;
    }

    void OnPointerCanceled(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs args)
    {
        this.gestureRecognizer.CompleteGesture();
        args.Handled = true;
    }

    void OnPointerReleased(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs args)
    {
        this.gestureRecognizer.ProcessUpEvent(args.GetCurrentPoint(this.element));
        args.Handled = true;
    }

    void OnPointerMoved(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs args)
    {
        this.gestureRecognizer.ProcessMoveEvents(args.GetIntermediatePoints(this.element));
    }   

    //Gesture Events

    void gestureRecognizer_Tapped(Windows.UI.Input.GestureRecognizer sender, Windows.UI.Input.TappedEventArgs args)
    {
        TxtGestureNotes.Text = "Tap gesture recognized";

    }

}

}

1 个答案:

答案 0 :(得分:0)

您可以跟踪用户在您的Tapped事件中点击的次数。记录最后一次点击的时间,如果新点击距离该点击足够接近,则更新计数。如果没有,则重新开始计数为零。

如下所示:

DateTime lastTap;
int numTaps;
TimeSpan tapRate; // initialize from Windows.UI.ViewManagement.UISettings.DoubleClickTime

void gestureRecognizer_Tapped(Windows.UI.Input.GestureRecognizer sender, Windows.UI.Input.TappedEventArgs args)
{
    if (DateTime.Now < lastTap + tapRate)
    {
        numTaps++;
    }
    else
    {
        numTaps = 1;
    }
    lastTap = DateTime.Now;
    TxtGestureNotes.Text = string.Format("Tap gesture {0} recognized", numTaps);
}