のアーカイブ

"WPF"タグ付きの投稿

WPFでのタッチのサポート

2010年10月8日 5件のコメント

この記事は、若干修正したタッチと操作 WPFのタッチのサポートの簡単な概要と私のリファレンスとして、MSDNの。

概要

Windows 7オペレーティングシステムに新しいハードウェアとAPIは、アプリケーションが同時に複数のタッチからの入力を受信する機能を備えています。 WPFは、アプリケーションが検出し、タッチが発生したときにイベントを発生させることにより、マウスやキーボードなど、他の入力に応答と同様の方法で触れるに応答できるようになります。

タッチイベントと操作イベント:WPFは、タッチが発生した2種類のイベントを公開します。 タッチイベントは、タッチスクリーンとその動きについて、それぞれの指についての生データを提供しています。 操作イベントは、特定のアクションとして入力を解釈する。

前提条件

あなたはタッチに反応するアプリケーションを開発するために次のコンポーネントが必要です。

  • Microsoft Visual Studio 2010を。
  • Windows 7の。
  • Windowsタッチをサポートしているようなタッチスクリーンなどのデバイス、、。

タッチイベントと操作イベント:WPFは、タッチが発生した2種類のイベントを公開します。 タッチイベントは、タッチスクリーンとその動きについて、それぞれの指についての生データを提供しています。 操作イベントは、特定のアクションとして入力を解釈する。

用語

タッチが議論されている場合、以下の用語が使用されます。

  • タッチはWindows 7で認識されるユーザー入力の種類です。 通常、タッチはタッチスクリーンに指を置くことによって開始されます。 デバイスは単なるマウス入力として、指の位置と動きを変換する場合、ラップトップコンピュータ上で共通しているタッチパッドなどのデバイスは、タッチをサポートしていないことに注意してください。
  • マルチタッチは、同時に複数のポイントから発生する感じです。 Windows 7とWPFは、マルチタッチをサポートしています。 タッチがWPFのドキュメントで説明されるたびに、概念はマルチタッチにも適用されます。
  • タッチがオブジェクトに適用される物理的なアクションとして解釈されている時に操作が発生します。 WPFでは、操作イベントは、翻訳、拡張、または回転操作として入力を解釈する。
  • タッチデバイスは、タッチスクリーン上の単一の指など、タッチ入力を、生成するデバイスを表します。
タッチに応答するコントロール

それは視野外にスクロールされるコンテンツがある場合は、次のコントロールがコントロール上を指でドラッグしてスクロールできます。

    ScrollViewerが定義されてScrollViewer.PanningModeあなたがパンタッチが水平方向、垂直方向に、両方、またはどちらも有効になっていないかどうかを指定できるようにする添付プロパティを。 ScrollViewer.PanningDecelerationのプロパティは、ユーザーがタッチスクリーンから指を離したときにスクロールが遅くなるかすぐに指定します。 ScrollViewer.PanningRatio添付プロパティは、操作のオフセットを変換するためにスクロールオフセットの比率を指定します。
    クラス図

    クラス図の下にはタッチをサポートするための主要なクラスとそのメンバを強調しています。

    WPF Touch Events Class Diagram

    • タッチ
      • タッチイベントは、両方で公開されているUIElementUIElement3D 、およびContentElementのバブルイベントとして、とを介してタッチFrameReported (Silverlightと互換性があるように)アプリケーションレベルのイベントとして。
      • タッチダウンしながら、移動し、最大のイベントはトンネリングおよびバブリング両方とも、入力とイベントが唯一のバブリングしているままに触れない。
      • タッチデバイスのキャプチャは、経由して明示的であるのUIElementCaptureTouchの方法。
      • タッチイベントが同期しています。
      • タッチイベントは、常に操作イベントが発生しているかどうか、起動されます。
      • WPFでは、マルチタッチをサポートしています。
    • 操作
      • 操作イベントはによって公開されているUIElementにのみイベントをバブリングとして。
      • 操作イベントは上解雇されているUIElementにのみ、そのIsManipulationEnabledが真である。
      • 操作イベントは同期しています。
      • 拡大と回転(ピボットポイントを持つ単一の指の回転を含む)、および慣性:WPFは、操作の3つのタイプをサポートしています。
      • タッチデバイスのキャプチャは、操作と暗黙的です。
      • 静的クラスの操作は、操作のイベントハンドラの外で操作パラメータを取得および更新するメソッドが含まれています。 また、このようなマニピュレータの追加や削除を追加するなどの操作ロジックの高度な使い方のためのメソッドが含まれています。
      • WPFは、複数のジェスチャーをサポートしています。
      • WPFには、ジェスチャー、または3D操作をサポートしていません。
    • ScrollViewerは操作と慣性のサポートが組み込まれています、そして、それはアプリケーションによってカスタマイズ可能です。

    タッチ

    タッチイベント

    基底クラス、 UIElementはUIElement3D 、およびContentElementは 、アプリケーションがタッチに反応されるように、サブスクライブできるイベントを定義します。 アプリケーションがオブジェクトを操作する以外の何かとしてタッチを解釈するときにタッチイベントが便利です。 たとえば、ユーザーが1つまたは複数の指で描くことができるようにするアプリケーションは、タッチイベントにサブスクライブします。

    すべての3つのクラスに関係なく定義するクラスの、同様に動作する次のイベントを、定義する。

    キーボードとマウスイベントと同様に、タッチイベントはルーティングイベントです。 プレビューで始まるイベントはトンネルイベントで、Touchで始まるイベントは、イベントをバブリングされています。 あなたがこれらのイベントを処理するときには、呼び出すことによって、任意の要素に対して相対的な入力の位置を、取得することができますGetTouchPointまたはGetIntermediateTouchPointsの方法を。

    タッチイベントの実行パス

    タッチイベント間の相互作用を理解するために、ユーザーは、要素の上に1本の指を置く要素で指を移動し、要素から指を離すシナリオを考えます。 次の図は、バブルイベント(トンネリングイベントは簡単にするために省略されている)の実行を示しています。

    次のリストは、前の図のイベントのシーケンスを説明します。 The sequence of touch events.

    1. TouchEnterのイベントは、ユーザーが要素上に指を置く1回発生します。

    2. タッチダウンのイベントが1回発生します。

    3. TouchMoveユーザーが要素内で指を移動するとイベントが複数回発生します。

    4. TouchUpのユーザーがその要素から指を離したときにイベントが1回発生します。

    5. TouchLeaveのイベントが1回発生します。

      本以上の指が使用されている場合、イベントは各指のために発生します。

    操作と慣性

    操作イベント

    アプリケーションがオブジェクトを操作するユーザを可能にするケースでは、 UIElementのクラスは操作イベントを定義します。 単にタッチの位置を報告するタッチイベントとは異なり、操作イベントは、入力を解釈する方法を報告する。 操作、変換、拡大、および回転の3つのタイプがあります。 次のリストは、操作の3つのタイプを起動する方法について説明します。

    • オブジェクト上に指を入れて、翻訳の操作を呼び出すためにタッチスクリーン上で指を動かす。 これは通常、オブジェクトを移動します。

    • オブジェクト上で二本の指を入れて、拡張操作を呼び出すために互いから離れて近くに一緒に指を移動したり。 これは通常、オブジェクトのサイズを変更します。

    • オブジェクト上で二本の指を入れ、回転操作を呼び出すためにお互いの周りを指で回転させる。 これは通常、オブジェクトを回転させます。

    操作には複数のタイプが同時に発生する可能性があります。

    もしオブジェクトが操作に反応させるときは、オブジェクトは慣性を持っているように見えることができます。 これにより、オブジェクトは物理的な世界をシミュレートすることができます。 たとえば、テーブル全体に本を押すと、あなたが十分に懸命にプッシュする場合本は、あなたがそれを解放した後に移動していきます。 WPFでは、ユーザーの指がオブジェクトを解放した後、操作イベントを発生させることにより、この動作をシミュレートすることができます。

    ユーザーがオブジェクトを移動、サイズ変更、および回転を可能にするアプリケーションを作成する方法については、参照してくださいチュートリアル:初めてのタッチアプリケーションの作成 ​​。

    UIElementは、以下の操作イベントを定義します。

    デフォルトでは、 UIElementは、これらの操作イベントを受信しません。 の操作イベントを受信するにはUIElementは 、セットがUIElement.IsManipulationEnabled trueに。

    操作イベントの実行パス

    ユーザーがオブジェクトを"スロー"のシナリオを考えます。 ユーザーがオブジェクト上に指を置く、短い距離のためのタッチスクリーン上で指を移動し、それが動いている際に、指を離す。 この結果、オブジェクトは、ユーザーの指の下に移動し、ユーザーが指を離した後に移動し続けることです。

    次の図は、操作イベントと各イベントに関する重要な情報の実行パスを示しています。

    操作イベント

    The sequence of manipulation events.

    次のリストは、前の図のイベントのシーケンスを説明します。

    1. ManipulationStartingユーザーがオブジェクト上に指を置くとイベントが発生します。 とりわけ、このイベントは、設定することができますManipulationContainerのプロパティを。 その後のイベントでは、操作の位置は相対的になりますManipulationContainer 以外のイベントではManipulationStarting 、このプロパティは読み取り専用ですので、 ManipulationStartingイベントでは、このプロパティを設定できる唯一の時間です。

    2. ManipulationStartedイベントは次の発生します。 このイベントは、操作の起点を報告します。

    3. のManipulationDeltaユーザーの指がタッチスクリーン上で移動するとイベントが複数回発生します。 DeltaManipulationののプロパティManipulationDeltaEventArgsのクラスは、操作が動き、拡張、または変換として解釈されているかどうかを報告します。 あなたがオブジェクトを操作する作業のほとんどを実行する場所です。

    4. ManipulationInertiaStartingイベントは、ユーザーの指が物体との接触を失う場合に発生します。 このイベントは、慣性中に操作の減速を指定できます。 あなたが選択した場合、オブジェクトが別の物理的スペースまたは属性をエミュレートできるようにするためです。 たとえば、アプリケーションが物理的な世界内の項目を表す2つのオブジェクトがあり、一方が他方よりも重いとします。 あなたは、重い物体が速く軽い物体よりも減速することができます。

    5. のManipulationDeltaイベントは慣性が発生したとして複数回発生します。 ユーザーの指がタッチスクリーンを越えて移動し、ときにWPFが慣性をシミュレートするときにこのイベントが発生することに注意してください。 言い換えれば、 のManipulationDeltaは前と後に発生しますManipulationInertiaStartingイベント。 ManipulationDeltaEventArgs.IsInertial財産報告書には、どうかのManipulationDeltaイベントが慣性中に発生するので、そのプロパティをチェックし、その値に応じて、異なるアクションを実行できます。

    6. ManipulationCompleted操作と、任意の慣性が終了するとイベントが発生します。 すべての後、つまりのManipulationDeltaイベントが発生、 ManipulationCompletedイベントは、操作が完了したことを通知するために発生します。

    境界のフィードバック

    UIElementは、また定義されてManipulationBoundaryFeedbackイベントを。 と、このイベントが発生しますReportBoundaryFeedbackのメソッドがで呼び出されるのManipulationDeltaイベント。 ManipulationBoundaryFeedbackイベントは、オブジェクトが境界に当たったときに視覚的なフィードバックを提供するために、アプリケーションまたはコンポーネントを有効にします。 たとえば、 ウィンドウクラスは、ハンドルManipulationBoundaryFeedbackそのエッジが検出されたときにウィンドウがわずかに移動させるためにイベントを。

    マウスプロモーション

    あなたが呼び出すことによって操作を取り消すことができます[キャンセル]を除くすべての操作のイベントでイベント引数でメソッドをManipulationBoundaryFeedbackイベント。 お電話の際キャンセル 、操作イベントはもはや発生しないとマウスイベントは、タッチのために発生している。 次の表は、操作がキャンセルされ、時間と発生するマウスイベントとの関係を説明します。


    キャンセルがで呼び出されるイベント

    既に発生した入力に発生するマウスイベント

    ManipulationStarting  

    ManipulationStarted

    イベントマウスダウン。

    のManipulationDelta

    マウスダウンとマウスムーブイベント。

    ManipulationInertiaStarting  

    ManipulationCompleted

    マウスダウン、マウス移動、およびイベントがマウスアップ。

    を呼び出す場合があることに注意してくださいキャンセル操作が慣性のときに、メソッドがfalseを返し、入力がマウスイベントを発生させない。

    タッチと操作イベントの関係

    UIElementは、常にタッチイベントを受け取ることができます。 ときにIsManipulationEnabledプロパティがtrueに設定されている、 UIElementは、タッチと操作イベントの両方を受け取ることができます。 場合タッチダウンイベントは(つまり、処理されないのHandledプロパティがfalseの場合)、操作ロジックは、要素にタッチをキャプチャし、操作イベントを生成します。 場合のHandledプロパティをtrueに設定されているタッチダウンイベント、操作ロジックは、操作イベントを生成しません。 次の図は、タッチイベントと操作イベントの関係を示しています。

    タッチと操作イベント

    Relationship between touch and manipulation events

    次のリストは、前の図に示されているタッチと操作イベントの関係を説明します。

        EventArgsクラスダイアグラム

      クラスダイアグラムの下にすべてのタッチと操作しているEventArgsクラスと関連する型を示しています。

      WPF Touch EventArgs Class Diagram
    Tags: , , カテゴリー: WPFの タグ: