WinRT-XAML中是否有Click,Tapped和PointerPressed同义词?

B. *_*non 33 xaml event-handling windows-8 winrt-xaml windows-store-apps

是否为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"/>
Run Code Online (Sandbox Code Playgroud)

Jer*_*ess 53

Click是为了向后兼容,与Tapped基本相同.Tapped是一种"高级手势",可以自动转换为点击,点按,按键等,这是我建议使用的.

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

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

  • 我喜欢把它想象成:1.Tapped是新的Click 2. PointerPressed是新的MouseDown 3. PointerReleased是新的MouseUp (8认同)
  • 基于[此主题]中描述的问题(http://stackoverflow.com/questions/21820482/winrt-xaml-tapped-event-responds-slowly-while-clicked-responds-rapidly/21842945?noredirect=1#comment34723798_21842945我建议`Click`可能不仅仅是backcompat. (3认同)
  • 不,不是。如@ jeremy-likness所说,`Click`并不存在向后兼容性。它远非等同于“被窃听”。如果这是一个“按钮”控件,则应每次处理“点击”,而忽略“点击”。如果要处理特殊用例的触摸手势,则“轻按”变得非常重要。再说一遍,`Tapped`不是@ flatliner-doa所说的新的`Click`。单击(在按钮控件上)没有改变。 (2认同)

Fil*_*kun 23

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Click是你应该在常规按钮上处理的.它具有按钮所需的逻辑.我能想到的是

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

如示例代码所示 - Tapped如果重复点击,事件不会注册所有分接头.我不确定这是否是因为某些潜在的手势识别逻辑会看到一些双击或者因为其他原因而拒绝其他所有点击.它适用于快速单点触摸/笔点击或鼠标点击,但它是一个通用事件,你可以处理任何UIElement,如果你想区分点击,双击,右点击(!)或保持任意UI元素可能会使用它.

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

  • 是的,Click 不存在向后兼容性。单击之所以存在,是因为它是一个按钮。点击是因为您可能想要处理触摸手势。Button 将 Taped 转发为 Click 的事实对开发人员来说是一个好处。它远非相同。 (2认同)

Ben*_*pke 7

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