37

我是否为 PointerPressed、Click 或 Tapped 创建事件处理程序是否重要?IOW,以下之间是否有任何功能差异:

<Button x:Name="BackButton" PointerPressed="BackButton_Click"/>    
<Button x:Name="BackButton" Click="BackButton_Click"/>    
<Button x:Name="BackButton" Tapped="BackButton_Click"/>

?

4

4 回答 4

57

Click 是为了向后兼容,本质上与 Tapped 相同。Tapped 是一种“高级手势”,它会自动转换为点击、点击、笔压等,这是我推荐使用的。

PointerPressed 不是你想要的。原因如下:如果我按住,PointerPressed 事件将在我最初“按下”时触发,然后 PointerReleased 将在完成后触发。这是更低级别的,您可以决定按下多长时间等。通常,长按不是您想要考虑的“点击”或“点击”,因为根据定义,点击的持续时间较短。因此,对于您想要的,“Tap”最能传达它,因为它使用系统计时为您翻译手势,用于被认为是“Tap”与按住的内容,并自动将点击和笔按下提升到同一事件。无论交互持续多长时间,只要按下按钮或按下手指,PointerPressed 就会触发。

我有一个相当复杂的应用程序,它演示了您可以从http://windows8applications.codeplex.com下载的各种交互- 只需参考第 4 章名为“Touch”的示例。

于 2012-11-21T12:21:40.453 回答
27

杰里米的回答并不完全准确。在另一个线程中,有人报告说在快速连续单击/轻敲时轻敲的工作方式与单击的工作方式不同,并且使用下面的代码很容易重现,并且可以很容易地扩展到指针事件。

public sealed partial class MainPage : Page
{
    private int clicks = 0;
    private int taps = 0;
    public MainPage()
    {
        this.InitializeComponent();
        var button = new Button();
        button.Width = 500;
        button.Height = 200;
        button.Content = string.Format("Clicks: {0}, Taps: {1}", clicks, taps);
        button.Click += (s, e) => button.Content = string.Format("Clicks: {0}, Taps: {1}", ++clicks, taps);
        button.Tapped += (s, e) => button.Content = string.Format("Clicks: {0}, Taps: {1}", clicks, ++taps);
        this.Content = button;
    }
}

Click是您应该在常规按钮上处理的内容。它具有按钮所期望的逻辑。我能想到的事情包括

  • 它可以与键盘和鼠标一起使用
  • 即使您按下按钮并缓慢释放它也可以工作
  • 当您按下按钮时可以取消它,也可以在之前按下按钮后通过拖回它来恢复
  • 它一次仅限于一个按钮,因此如果您尝试同时单击两个按钮 - 第一个触摸不会单击(与支持多用户交互的原始 Surface/PixelSense 不同!)
  • 它可能更适用于自动化等功能以及 Windows 的辅助功能
  • 它总是有效

如示例代码中所示 -Tapped如果您重复点击,该事件不会注册所有点击。我不确定这是否是因为某些底层手势识别逻辑看到了一些双击,或者出于任何其他原因简单地拒绝了其他所有点击。它适用于快速的单点触摸/笔点击或鼠标点击,但它是一个通用事件,您可以处理任何事件,UIElement如果您想区分点击、双击、右键点击 (!) 或按住任意 UI 元素,则可以使用它.

指针事件是较低级别的,您可以使用它们来处理框架中尚未内置的稍微高级的交互。正如我所提到的 - 单击包括按钮上发生的按下和伴随的释放,因此可以使用指针事件对类似的交互进行建模。例如,您可以使用它来实现某种类型的 Whac-A-Mole/Twister 组合类型的游戏,在其中您想要同时混合许多 UI 元素,而这是您无法通过点击完成的。

于 2014-04-01T06:33:11.567 回答
7

您应该使用 Click for Buttons(以及 ListView、Hyperlink、MenuFlyoutItem、ContentDialog 等)。Tapped 只是一个指针事件,因此如果您使用键盘、访问键或自动化,它不会被调用。

于 2017-01-03T17:26:12.483 回答
3

我知道这是一个古老的主题,但是当它说ClickTapped基本相同时,获胜的答案是不正确的。他们不是。如果您需要在控件中快速单击,Tapped 的响应速度与Click的响应速度不同。

在非常具体的场景中,比如在定制的数字键盘中,如果用户想要输入像 '11' 这样的值(点击同一个按钮两次),当你使用Tapped时,你经常会错过第二个字符,所以你会得到一个 ' 1',而不是'11'。使用Click不会发生这种情况。

ps.:我用的是UWP

于 2019-08-22T15:14:49.770 回答