1

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

非常感谢。

更新

我终于编写了这段代码,以在有限的矩形(16px 宽度和高度)上重现一个简单的双击 TouchLeave 事件,并在 2 个 TouchLeave 事件之间所需的时间为 500 毫秒。这段代码没有优化,但它可以工作,如果你有什么意见,不要犹豫:)

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;
        }
    }
4

2 回答 2

0

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

此外,微软的 Surface UI 设计指南(免责声明:我帮助编写它们)实际上强烈反对“双击”的概念。触摸旨在为用户提供一种更“自然”的与技术交互的方式,而无需任何“隐藏”功能的培训、文档或记忆。双击不是人类在物理世界中进行的交互,也没有任何视觉可供性。因此,不适合在软件应用程序中使用。苹果同意这一理念,顺便说一句——你不会在 iPhone 或 iPad 上看到任何双击交互。

于 2011-08-02T20:58:01.313 回答
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.
           }
     }

让我知道这个是否奏效....

于 2011-08-02T11:44:34.413 回答