Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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章名为Touch的示例

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

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”,则在您使用“Tapped”时,您经常会错过第二个字符,因此您会得到一个“1”,而不是一个“11”。如果单击,则不会发生这种情况


附言:我用的是UWP

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