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

时间:2012-11-10 02:08:40

标签: 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"/>

4 个答案:

答案 0 :(得分:53)

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

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

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

答案 1 :(得分:21)

杰里米的回答并不完全准确。在another thread中有人报告说点击/点按快速连续点击时点击的效果与点击不同,并且使用下面的代码很容易重现,并且很容易扩展到指针事件。

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元素,而您无法做到这一点点击次数。

答案 2 :(得分:5)

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

答案 3 :(得分:2)

我知道这是一个古老的主题,但是当它说 Click Tap 基本相同时,成功的答案是不正确的。他们不是。如果您需要在控件中进行快速点击,则点击的响应速度不会与 Click 相同。

在非常特殊的情况下,例如在定制的数字小键盘中,如果用户想要输入“ 11”之类的值(两次轻按同一按钮两次),则在使用轻按时,错过第二个字符,因此得到的是“ 1”,而不是“ 11”。使用点击不会发生。

ps .:我正在使用UWP