Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单击、点击和指针压缩在WinRT XAML中是否同义?_Xaml_Event Handling_Windows 8_Winrt Xaml_Windows Store Apps - Fatal编程技术网

单击、点击和指针压缩在WinRT XAML中是否同义?

单击、点击和指针压缩在WinRT XAML中是否同义?,xaml,event-handling,windows-8,winrt-xaml,windows-store-apps,Xaml,Event Handling,Windows 8,Winrt Xaml,Windows Store Apps,我是否为PointerPressed、Click或Tapped创建事件处理程序有关系吗?请注意,以下各项之间是否存在功能差异: <Button x:Name="BackButton" PointerPressed="BackButton_Click"/> <Button x:Name="BackButton" Click="BackButton_Click"/> <Button x:Name="BackButton" Tapped="BackButt

我是否为PointerPressed、Click或Tapped创建事件处理程序有关系吗?请注意,以下各项之间是否存在功能差异:

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


点击是为了向后兼容,基本上与点击相同。点击是一种“高级手势”,它会自动转换为点击、点击、笔触等,这是我建议使用的手势

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


我有一个相当复杂的应用程序,它演示了您可以从中下载的各种交互,只需参考第4章的“触摸”示例即可。

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

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;
    }
}
单击
是您应该在常规按钮上处理的内容。它具有预期的按钮逻辑。我能想到的事情包括

  • 它与键盘和鼠标配合使用
  • 即使您按下按钮并缓慢释放,它也能工作
  • 当您通过从按钮上拖动而按下时,可以取消该按钮,也可以在先前按下按钮后通过拖动而恢复该按钮
  • 一次只能单击一个按钮,因此如果您尝试同时单击两个按钮,则第一个按钮不会单击(与支持多用户交互的原始Surface/PixelSense不同!)
  • 它可能在自动化和Windows的可访问性等方面工作得更好
  • 它总是有效的
如示例代码所示-如果您重复点击,
点击
事件不会为所有点击注册。我不确定这是否是因为一些潜在的手势识别逻辑看到了一些重复点击,或者只是出于其他原因拒绝了每一次点击。它适用于快速单触/笔点击或鼠标点击,但它是一个通用事件,您可以在任何
UIElement
上处理,如果您想区分点击、双击、右击(!)或按住任意UI元素,可以使用它


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

您应该使用单击按钮(以及列表视图、超链接、菜单实用项、内容对话框等)。点击只是一个指针事件,因此如果你使用键盘、访问键或自动操作,它不会被调用。

我知道这是一个老话题,但是当它说点击和点击基本相同时,获胜的答案是不正确的。事实并非如此。如果您需要在控件中快速单击,点击的响应速度与单击的响应速度不同

在非常特定的场景中,例如在定制的数字键盘中,如果用户想要输入像“11”这样的值(点击相同的按钮两次),当您使用点击时,您经常会错过第二个字符,因此您会得到一个“1”,而不是一个“11”。使用单击不会发生这种情况


附言:我用的是UWP

很好的答案。谢谢:-)我喜欢把它想象成:1。点击是新的点击2。指针按下是新的鼠标向下3。PointerReleased是基于中描述的问题的新鼠标。我建议,
单击
可能不仅仅用于backcompat。为什么我不能让
PointerPressed
在UWP中工作?它只会在右键单击时被触发。当我左键点击那个按钮时,什么也没发生。不完全是这样<代码>点击并不像@jeremy likness所说的那样是为了向后兼容。它远不是等同于被轻触的
。如果这是一个
按钮
控件,您应该每次处理
点击
,并忽略点击的
按钮
。如果您正在为一个特殊的用例处理触摸手势,那么点击
将变得非常重要。重复一遍,
点击
并不是@flatliner doa所说的新的
点击
<代码>单击
(在
按钮
控件上)未更改。单击和点击之间的一个重要区别是,如果触发控件操纵事件,单击将被触发,但点击不会触发。例如,如果拖动按钮移动按钮,按钮将移动,操纵完成后,按钮点击会被触发,但点击不会,点击只会在点击时触发而不会拖动。我注意到与按钮一起使用时的另一个区别是,键事件Enter和Space会被路由到点击的处理程序,但不会被点击。默认情况下,输入和空格甚至不会由KeyUp/KeyDown处理程序处理!是的,单击不存在向后兼容性。单击是因为它是一个按钮。塔普