Windows 8 / XAML双击事件总是先于单击事件

8
我在一个应用程序中有一个按钮。我希望它根据单击(暂停动画)或双击(重新开始动画)执行不同的操作。但是,当我双击时,似乎先触发单击事件,然后快速触发双击事件。这个问题有解决方法吗?这是已知的问题还是我犯了新手错误?编辑:对于那些问的人,我正在使用“Tapped”和“DoubleTapped”事件。

1
一些代码会很有帮助,例如您是否正在使用DoubleTapped()或MouseDoubleClicked();另一方面,为什么不只是使用单击切换动画,这似乎更适合新手用户友好/直观。 - Paul Zahra
这是一个计时器,单击暂停计时器,双击完全重置计时器。 - roryok
为什么不让单击暂停计时器,如果用户再次单击且计时器已暂停,则允许计时器继续?即使用单击切换计时器的开关。 - Paul Zahra
3个回答

18

将空格键暂停一段时间以单击制表符。如果发生双制表符事件,则会消除单个制表符事件

  bool singleTap;
    private async void control_Tapped_1(object sender, TappedRoutedEventArgs e)
    {
        this.singleTap = true;
        await Task.Delay(200);
        if (this.singleTap)
        {
              // Single tab Method .
        }
    }

    private void control_DoubleTapped_1(object sender, DoubleTappedRoutedEventArgs e)
    {
        this.singleTap = false;

        // Double tab Method  
  }

我个人认为这是最好的方法!! - abhinav pandey

4
你可能需要考虑让它同时完成两个动作。可以将其比喻为Windows中的双击文件夹。用户会习惯在第一次单击时高亮文件夹,然后期待双击会同时高亮和导航到该文件夹。
总的来说,这似乎是一个设计问题,而不是技术问题。

2
你可能是对的。我也许可以用逻辑来解决它。我只是想知道是否使用了错误的事件。 - roryok

0
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern uint GetDoubleClickTime();
    bool _singleTapped = false;

        //Tapped event handler
        private async void control_Tapped(object sender, TappedRoutedEventArgs e)
        {
        _singleTapped = true;
            //var x = GetDoubleClickTime();
            //GetDoubleClickTime() gets the maximum number of milliseconds that can elapse between a first click and a second click
            await Task.Delay(TimeSpan.FromMilliseconds(GetDoubleClickTime()));

            if (!_singleTapped)
            { return; }
           //SingleTapped code
        }

        //DoubleTapped event handler
        private async void control_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
        {
            _singleTapped = false;
            //DoubleTapped code
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接