【问题标题】:Tapped event should not fire when holdding event perform (UWP)按住事件执行 (UWP) 时不应触发点击事件
【发布时间】:2018-01-10 16:37:18
【问题描述】:

因为在 UWP 中不提供 Hold And Tap 事件,所以我在 UWP 中使用 Tapped And Hold 事件。

对于 Windows phone 8 应用程序,我正在对按钮使用点击手持事件。当我按住按钮时,点击事件不会触发。

但在 UWP 中,我尝试了 Click 和 Tapped 事件,但当我按住按钮时都会触发。

请给我建议其他方法,当我按住按钮时其他事件不应该触发 在此处保持事件是必要的,建议我交替使用 Tapped 和 click 事件,因为当我按住并释放按钮时会触发这些事件

XAML

<StackPanel Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center">
       <Button Name="BackwardButton" 
               FontFamily="Segoe MDL2 Assets" Content="&#xE26C;"
               FontSize="30" Background="Transparent"
               Tapped="BackwardButton_Tapped" Holding="BackwardButton_Holding"
               PointerExited="BackwardButton_PointerExited"/></StackPanel>



<TextBlock Name="txtBox1"  FontSize="18"
           HorizontalAlignment="Center" VerticalAlignment="Bottom"/>

C#

private static int i;
private void BackwardButton_Tapped(object sender, TappedRoutedEventArgs e)
{
    i++;

    txtBox1.Text = i.ToString();
}


private int a = 10;
private void BackwardButton_Holding(object sender, HoldingRoutedEventArgs e)
{
     BackwardButton.Content = "\xE100";
     try
     {
         a++;
         txtBox1.Text = a.ToString();
     }
     catch (Exception)
     {
         //Exception(ex);
     }
}



private void BackwardButton_PointerExited(object sender, PointerRoutedEventArgs e)
{           
    BackwardButton.Content = "\xE26C";            
}

我已经尝试过的解决方案- https://social.msdn.microsoft.com/Forums/en-US/e386e2e8-0312-4b1e-8eea-9522db83d632/click-and-tapped-event-should-not-fire-when-holding-event-perform?forum=wpdevelop

在 Windows 8 上尝试了解决方案,但在 UWP 中不提供按住并点击事件 Click Event should not trigger when hold event perform

【问题讨论】:

  • 实际上你需要展示更多的代码。我无法复制这个。
  • @JustinXL 好的,我添加了更多代码
  • 好的 xaml 添加
  • 当我长按按钮时,只有Holding 事件触发...我错过了什么?
  • 但是当你释放按钮时,点击事件也会触发,但是当我使用相同的东西赢得 8 手机保持和点击事件时,当我按住并释放按钮时点击事件不会触发

标签: c# uwp


【解决方案1】:

注意Holding 事件将触发两次。第一次处于HoldingState.Started 状态,第二次处于HoldingState.Completed。您所要做的就是将您的逻辑包装在以下if 语句中

private void BackwardButton_Holding(object sender, HoldingRoutedEventArgs e)
{
    if (e.HoldingState == Windows.UI.Input.HoldingState.Started)
    {
        ...
    }

我建议您开始使用断点来解决此类问题。通过将断点置于

,确定在保持期间永远不会调用 Tapped 事件应该是相当简单的
txtBox1.Text = i.ToString();

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2017-04-25
    • 1970-01-01
    • 2016-07-01
    • 2023-03-27
    • 2018-04-18
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    相关资源
    最近更新 更多