杰里米的回答并不完全准确。在另一个帖子中,有人报告说当快速点击/触摸时,敲击事件与单击事件不同,存在问题,以下代码可以很容易地重现此问题,而且可以轻松扩展到指针事件。
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元素上的单击、双击、右击(!)或保持。
指针事件是较低级别的,您可以使用它们来处理框架中尚未构建的略微更高级的交互。正如我之前提到的-单击包括在按钮上同时发生的按下和释放,因此类似的交互可以用指针事件来模拟。例如,您可以将其用于实现某种同步点击多个UI元素的Whac-A-Mole / Twister组合游戏,在这种情况下,您无法使用单击。