【问题标题】:Winrt Xaml Tapped Event Responds Slowly While Clicked Responds RapidlyWinrt Xaml 点击事件响应缓慢,而点击响应迅速
【发布时间】:2014-02-17 03:59:36
【问题描述】:

我最近创建了一个自定义输入板,其中包含用户可以快速单击的按钮(它基本上是一个自定义数字输入板)。问题是,如果按钮点击事件用于注册输入板键的处理程序,它的响应速度太慢以至于错过了按钮按下(这意味着如果我快速按下数字 2 五次,可能会出现 2 或 3 个二)。将事件从 Tapped 更改为 Clicked(其他代码相同)会导致输入板完全响应。

为什么 Tapped 事件处理程序如此迟钝,使用 Tapped 处理程序而不是 Clicked 处理程序是否有任何潜在影响?

【问题讨论】:

    标签: c# windows-runtime winrt-xaml


    【解决方案1】:

    我没有用它来验证,但它可能支持双击事件。也许如果您将IsDoubleTapEnabled 设置为false,那么点击事件会更快到来。

    【讨论】:

    • 这是一个非常好的主意,但不幸的是它不起作用。当 IsDoubleTapEnabled 设置为 false 时,Tapped 和 Click 之间仍然存在主要区别。为了说明它有多糟糕,当我快速单击数字 1 到 9 时,我会在使用单击处理程序时获得所有数字,而在将 IsDoubleTapEnabled 设置为 false 的情况下使用 Tapped 时只会获得一两个数字。如果这有什么不同的话,按钮本身就是重复按钮。
    • 抱歉这么久才回复。我花了一些时间尝试重新创建,发现只需一个带有文本块和按钮的简单应用程序就可以重现该问题。每次点击按钮时,处理程序都会向文本块添加一个字母。通过计算我点击鼠标左键的次数,我能够将“点击”的实际数量与在文本块中注册为字母的数量进行比较。我发现只有大约一半的点击实际上导致了对 Tapped 事件处理程序的调用。这是使用 VS2013 express 在调试模式(本地机器)下运行的。
    • 我想Tapped 事件用于处理单击。如果您需要处理所有点击 - 处理 Click 事件。如果您想了解更多详细信息,请处理 Pointer~ 事件。
    • 我猜它一定是这样的,否则在点击后会有某种延迟,在此期间任何其他传入的点击都会被忽略。从阅读这两者中可以看出,Click 是遗留的,而 Tapped 是要使用的(see this article),所以从用户的角度来看,Click 是两者中更准确的一种,这有点奇怪。但您可能是对的,可能是一些设计问题导致了这种情况。
    • 我认为您链接的答案不准确。我不知道Click 和Tapped 事件背后的原因是什么,但我假设只存在于ButtonBase 上的Click 事件应该用于按钮,而Tapped 是适用于所有控件,更像是一种手势而不是动作。您单击 XAML 按钮,但您可以点击任何内容。单击与按钮的所有逻辑相关联。轻敲就是轻敲。
    【解决方案2】:

    这个答案真的来自 Filip Skakun 的 cmets 关于他在这篇文章中给出的另一个答案,但为了让人们更容易找到这个答案,我将单独发布。如果 Filip 编辑他的答案或将此作为新答案发布,我将删除我的答案,以便他成为获得功劳的人。

    对我有用的解决方案是使用PointerReleased 事件而不是Tapped 事件。使用Tapped 时,如果点击/点击快速连续,我只会收到大约一半的事件。但是,如果我改用 PointerReleased,那么我会收到我所有的事件。

    【讨论】:

    • 这里有一个单独的答案很好。我只想指出,仅PointerReleased 可能还不够,因为您可能还想确保在您的元素上引发了来自同一来源的匹配PointerPressed,您可能需要调用@987654327 @。还可能需要限制事件之间的最长时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多