2011-08-02 19 views
1

Microsoft Surfaceコントロールを使用するWPF4タッチアプリケーションを開発しました。 ScatterViewItemでMouseDoubleClickイベントをキャッチしたいと思います。イベントは、マウスを使用すると起動しますが、私が指を使用するとイベントは発生しません。どうして ?MouseDoubleClick&ScatterViewItemをタッチ

ありがとうございます。

UPDATE

私は最終的に2つのするTouchLeaveイベント間に必要な時間のために限られたRECT(16pxに幅&高さ)と500msの上するTouchLeaveイベントとシンプルなダブルタップを再現するために、このコードを書きました。このコードは最適化されたが、それはあなたには、いくつかの発言を持っている場合は、躊躇しないでください:)

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; 
     } 
    } 
+0

1)あなたはこれを行うべきではありません - 下記の私の答えを見てください。 2)TouchLeaveの代わりにTouchUpを使用する必要があります。実際に指を離す以外にいくつかの状況で離れる。 3)タッチイベント間の座標を比較するには、スキャッタビューではなく画面に対する座標を使用する必要があります。それが入っているスキャッタビューやウィンドウ自体がイベント間を移動する可能性があります。これはバグを診断するのが難しい一般的な原因です –

+0

あなたの発言に感謝しますが、TouchDown/TouchUpイベントは私のScatterViewItemで決して上がらないようです...私は理由はわかりません... – Nico

答えて

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. 
      } 
    } 

これが動作するかどうか、私に教えてください....

+0

イベント、 (実際には、私はScatterViewItemのタッチで動作するマウスイベントはないと思います... 私はこれを試しました: Mouse.AddMouseDownHandler(myScatterItem、new MouseButtonEventHandler(TestMouseDown)); myScatterItem.MouseDown + = blablabla ... – Nico

+0

My Bad!これは明らかにTouch関連のイベントで、マウスのダブルクリックと同様に動作しません。ダブルタップを想定する唯一の方法は、TouchDownイベントを処理し、同じ要素(振る舞いが付いている)上の2つの連続したタッチダウンの差をh 2番目の違いがあります.... –

0

APIレベルでは、タッチイベントは、ダブルクリックイベントを生成しません。

さらに、MicrosoftのSurface UIデザインガイドライン(免責事項:私はそれらを書く手助けをしました)は、実際には「ダブルタップ」の概念に強くお勧めします。 Touchは、ユーザーに、「隠された」機能の追加、文書化、または暗記の必要なしに、より自然な方法で技術と対話する方法を提供することを目的としています。ダブルタップは、人間が物理世界でやる相互作用ではなく、視覚的なアフォーダンスがあるものではありません。したがって、ソフトウェアアプリケーションで使用することは適切ではありません。 Appleはこの考え方に同意します、btw - iPhoneやiPadでダブルタップのやりとりは見られません。

+0

私はダブルタップに関して、タッチスクリーンの主な選択アクションではなく、iPhones \ iPadsがズーム用のダブルタップをサポートしていると言っています。だから、それはユーザーの行動のためのオプションになることができます。 –

関連する問題