单击vs双击wp7中的困境

时间:2012-05-18 09:03:37

标签: windows-phone-7 silverlight-4.0

单击与双击困境

我发生了一次单击事件,我发生了不同的事件双击。

单击:加载电子邮件消息的预览

双击:在不同窗口中加载消息视图

问题是,为了实现双击,只需单击一次......两次。 目前的解决方案是单击一次超时,如果检测到双击则取消它。

问题1:双击事件发生的超时是多少?例如,如果我单击一下非常慢,就不会发生这种情况。

问题2:有没有比使用超时更好的解决方法?

4 个答案:

答案 0 :(得分:3)

您一定要重新考虑您的用户界面。查看您周围的应用程序,尤其是在Windows中:当支持双击时,始终会触发单击操作并且不引人注目。例如,双击图标时,第一次单击将选择它,第二次单击将触发该操作。至少有两个原因:

  1. 双击是一种复杂的动作。用户有时会失败,而是触发单击操作。因此,你不想做任何可能惹恼他的事情。

  2. 如果您不想在每次用户双击时触发单击操作,则除了设置超时之外别无他法。这意味着每个尝试使用单击的用户都必须承担超时,降低应用程序响应速度并阻碍用户体验。

  3. 我还可以添加一个特定于WP7开发的原因:由于双击未在大多数其他移动应用中使用,因此手势无法被发现,并且大多数用户都不会意识到他们可以使用它

    底线:考虑使用其他手势(如扫描或点击并保持),或更改您的UI以使其不必要。

答案 1 :(得分:1)

我在朋友的帮助下找到了答案。

private void Button_Tap(object sender, GestureEventArgs e)
    {
        //add the event handler for single tap event
        dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
        //start timer. If the tick happends a single tap happend. If it is a double tap the tick event will be removed.
        dispatcherTimer.Start();
    }

    //No double tap happend. So execute the tap function.
    private void dispatcherTimer_Tick(object sender, EventArgs e)
    {
        //Stop timer
        dispatcherTimer.Tick -= new EventHandler(dispatcherTimer_Tick);
        dispatcherTimer.Stop();

        //Rest of the tap function
        Taps.Add("Tap");
    }

    private void Button_DoubleTap(object sender, GestureEventArgs e)
    {
        //Stop timer
        dispatcherTimer.Tick -= new EventHandler(dispatcherTimer_Tick);
        dispatcherTimer.Stop();

        //Rest of the double tap function
        Taps.Add("Double tap");
    }

答案 2 :(得分:0)

为什么不用别的东西。 点击以在新窗口中打开 坚持预览?

答案 3 :(得分:0)

在wp7上,doubleTap可能从未使用过。保持将是正确的方式