首页 > 解决方案 > 在 UWP 中触发 DoubleTappedEvent 时如何停止 TappedEvent?

问题描述

我有一个带有轻敲和双敲击事件的 Stackpanel。

        StackPanel ButtonPanel=new StackPanel{Widyh=100,Height=30};
        ButtonPanel.IsDoubleTapEnabled = true;
        ButtonPanel.DoubleTapped += ButtonPanel_DoubleTapped;
        ButtonPanel.Tapped += ButtonPanel_Tapped;

        private void ButtonPanel_Tapped(object sender, TappedRoutedEventArgs e)
        {
        Debug.WriteLine("Tapped");
        }

        private void ButtonPanel_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
        {
        Debug.WriteLine("Double");
        }

当我在 Stackpanel 上双击时,它首先触发 tapped 事件,然后触发 doubleTapped 事件。在这种情况下,我不想触发 tapped 事件。双击时如何停止触发 tappedEvent?我想对 tapped 和 doubeTapped 事件执行单独的操作。如何在 UWP 中做到这一点?

标签: uwpuwp-xaml

解决方案


官方文档提到“如果您希望 Tapped 与 DoubleTapped 的逻辑不同,您的 Tapped 处理程序可能需要使用特定于应用程序的变量和计时器,以避免在最终被解释为 DoubleTap 操作的交互上运行。”</ p >

所以你可以像下面这样解决这个问题。

    public bool singleTap;  
    private async void ButtonPanel_Tapped(object sender, TappedRoutedEventArgs e)
    {
        singleTap = true;
        await Task.Delay(200);
        if (this.singleTap)
        {
         
            Debug.WriteLine("Tapped");
        }
            
    }

    private void ButtonPanel_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
    {
        singleTap = false;
        Debug.WriteLine("Double");
    }

推荐阅读