MouseDoubleClick&触摸ScatterViewItem

时间:2011-08-02 10:36:52

标签: c# wpf touch double-click scatterview

我开发了一个使用一些Microsoft Surface控件的WPF4触摸应用程序。我想在ScatterViewItem上捕获MouseDoubleClick事件。当我使用鼠标时,事件会触发,但是当我使用我的手指时,事件永远不会被提升。为什么?

非常感谢。

更新

我终于编写了这段代码,在有限的矩形(16px宽度和高度)上重现简单双击TouchLeave事件,并在2次TouchLeave事件之间的所需时间内重现500ms。这段代码没有经过优化但是有效,如果你有一些评论,请不要犹豫:)

private bool _doubleHasTimeAndPos = false;

private TimeSpan? _doubleTouchTime = null;
private Point? _doubleTouchPoint = null;    

private void ScatterViewItem_TouchLeave(object sender, TouchEventArgs e)
    {
        if (!this._doubleHasTimeAndPos)
        {
            this._doubleTouchTime = DateTime.Now.TimeOfDay;
            this._doubleTouchPoint = e.GetTouchPoint(this.scatterView).Position;

            this._doubleHasTimeAndPos = true;
        }
        else
        {
            if (DateTime.Now.TimeOfDay.Subtract(this._doubleTouchTime.Value).TotalMilliseconds <= 500)
            {
                Point touchPoint = e.GetTouchPoint(this.scatterView).Position;

                double xDelta = Math.Abs(this._doubleTouchPoint.Value.X - touchPoint.X);
                double yDelta = Math.Abs(this._doubleTouchPoint.Value.Y - touchPoint.Y);

                if (xDelta <= 16 && yDelta <= 16)
                {
                    // DOUBLE TAP here !
                }
            }

            this._doubleTouchTime = null;
            this._doubleTouchPoint = null;

            this._doubleHasTimeAndPos = false;
        }
    }

2 个答案:

答案 0 :(得分:0)

由于缺乏测试此代码的触摸基础设施而只是猜测...

WPF建议对任何UIElement使用Mouse.MouseDown附加事件,然后使用((MouseButtonEventArgs)e.ClickCount)检查值2以进行双击。

     <ScatterViewItem Mouse.MouseDown="MouseButtonEventHandler" ... />

然后

     private void MouseButtonDownHandler(object sender, MouseButtonEventArgs e)
     {
           if (e.ClickCount == 2) 
           {
                  //// Its a double click... should work for touch.
           }
     }

让我知道这是否有效......

答案 1 :(得分:0)

在API级别,触摸事件不会生成双击事件。

此外,微软的Surface UI设计指南(免责声明:我帮助编写它们)实际上强烈反对“双击”的概念。 Touch旨在为用户提供一种更“自然”的技术交互方式,而无需对“隐藏”功能进行任何培训,记录或记忆。双击不是人类在物理世界中所做的交互,也不是任何视觉上可供选择的东西。因此,不适合在软件应用程序中使用。 Apple赞同这一理念,顺便说一下 - 你不会在iPhone或iPad上看到任何双击互动。