GestureRecognizer クラス

定義

ジェスチャと操作の認識、イベント リスナー、設定を提供します。

public ref class GestureRecognizer sealed
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.None)]
class GestureRecognizer final
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.None)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class GestureRecognizer final
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.None)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class GestureRecognizer final
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.None)]
public sealed class GestureRecognizer
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.None)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class GestureRecognizer
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.None)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class GestureRecognizer
function GestureRecognizer()
Public NotInheritable Class GestureRecognizer
継承
Object Platform::Object IInspectable GestureRecognizer
属性

Windows の要件

デバイス ファミリ
Windows 10 (10.0.10240.0 で導入)
API contract
Windows.Foundation.UniversalApiContract (v1.0 で導入)

ここでは、ポインターとジェスチャの両方の入力を処理するための入力イベント ハンドラーのコレクションを使用して GestureRecognizer オブジェクトを設定します。 Windows ランタイム イベントをリッスンして処理する方法の詳細については、「イベントとルーティング イベントの概要」を参照してください。 完全な実装については、 基本的な入力サンプル を参照してください。

class ManipulationInputProcessor
{
    GestureRecognizer recognizer;
    UIElement element;
    UIElement reference;
    TransformGroup cumulativeTransform;
    MatrixTransform previousTransform;
    CompositeTransform deltaTransform;

    public ManipulationInputProcessor(GestureRecognizer gestureRecognizer, UIElement target, UIElement referenceFrame)
    {
        recognizer = gestureRecognizer;
        element = target;
        reference = referenceFrame;
        // Initialize the transforms that will be used to manipulate the shape
        InitializeTransforms();
        // The GestureSettings property dictates what manipulation events the
        // Gesture Recognizer will listen to.  This will set it to a limited
        // subset of these events.
        recognizer.GestureSettings = GenerateDefaultSettings();
        // Set up pointer event handlers. These receive input events that are used by the gesture recognizer.
        element.PointerPressed += OnPointerPressed;
        element.PointerMoved += OnPointerMoved;
        element.PointerReleased += OnPointerReleased;
        element.PointerCanceled += OnPointerCanceled;
        // Set up event handlers to respond to gesture recognizer output
        recognizer.ManipulationStarted += OnManipulationStarted;
        recognizer.ManipulationUpdated += OnManipulationUpdated;
        recognizer.ManipulationCompleted += OnManipulationCompleted;
        recognizer.ManipulationInertiaStarting += OnManipulationInertiaStarting;
    }

    public void InitializeTransforms()
    {
        cumulativeTransform = new TransformGroup();
        deltaTransform = new CompositeTransform();
        previousTransform = new MatrixTransform() { Matrix = Matrix.Identity };
        cumulativeTransform.Children.Add(previousTransform);
        cumulativeTransform.Children.Add(deltaTransform);
        element.RenderTransform = cumulativeTransform;
    }

    // Return the default GestureSettings for this sample
    GestureSettings GenerateDefaultSettings()
    {
        return GestureSettings.ManipulationTranslateX |
            GestureSettings.ManipulationTranslateY |
            GestureSettings.ManipulationRotate |
            GestureSettings.ManipulationTranslateInertia |
            GestureSettings.ManipulationRotateInertia;
    }

    // Route the pointer pressed event to the gesture recognizer.
    // The points are in the reference frame of the canvas that contains the rectangle element.
    void OnPointerPressed(object sender, PointerRoutedEventArgs args)
    {
        // Set the pointer capture to the element being interacted with so that only it
        // will fire pointer-related events
        element.CapturePointer(args.Pointer);
        // Feed the current point into the gesture recognizer as a down event
        recognizer.ProcessDownEvent(args.GetCurrentPoint(reference));
    }

    // Route the pointer moved event to the gesture recognizer.
    // The points are in the reference frame of the canvas that contains the rectangle element.
    void OnPointerMoved(object sender, PointerRoutedEventArgs args)
    {
        // Feed the set of points into the gesture recognizer as a move event
        recognizer.ProcessMoveEvents(args.GetIntermediatePoints(reference));
    }

    // Route the pointer released event to the gesture recognizer.
    // The points are in the reference frame of the canvas that contains the rectangle element.
    void OnPointerReleased(object sender, PointerRoutedEventArgs args)
    {
        // Feed the current point into the gesture recognizer as an up event
        recognizer.ProcessUpEvent(args.GetCurrentPoint(reference));
        // Release the pointer
        element.ReleasePointerCapture(args.Pointer);
    }

    // Route the pointer canceled event to the gesture recognizer.
    // The points are in the reference frame of the canvas that contains the rectangle element.
    void OnPointerCanceled(object sender, PointerRoutedEventArgs args)
    {
        recognizer.CompleteGesture();
        element.ReleasePointerCapture(args.Pointer);
    }

    // When a manipulation begins, change the color of the object to reflect
    // that a manipulation is in progress
    void OnManipulationStarted(object sender, ManipulationStartedEventArgs e)
    {
        Border b = element as Border;
        b.Background = new SolidColorBrush(Windows.UI.Colors.DeepSkyBlue);
    }

    // Process the change resulting from a manipulation
    void OnManipulationUpdated(object sender, ManipulationUpdatedEventArgs e)
    {
        previousTransform.Matrix = cumulativeTransform.Value;
        // Get the center point of the manipulation for rotation
        Point center = new Point(e.Position.X, e.Position.Y);
        deltaTransform.CenterX = center.X;
        deltaTransform.CenterY = center.Y;
        // Look at the Delta property of the ManipulationDeltaRoutedEventArgs to retrieve
        // the rotation, X, and Y changes
        deltaTransform.Rotation = e.Delta.Rotation;
        deltaTransform.TranslateX = e.Delta.Translation.X;
        deltaTransform.TranslateY = e.Delta.Translation.Y;
    }

    // When a manipulation that's a result of inertia begins, change the color of the
    // the object to reflect that inertia has taken over
    void OnManipulationInertiaStarting(object sender, ManipulationInertiaStartingEventArgs e)
    {
        Border b = element as Border;
        b.Background = new SolidColorBrush(Windows.UI.Colors.RoyalBlue);
    }

    // When a manipulation has finished, reset the color of the object
    void OnManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
    {
        Border b = element as Border;
        b.Background = new SolidColorBrush(Windows.UI.Colors.LightGray);
    }

    // Modify the GestureSettings property to only allow movement on the X axis
    public void LockToXAxis()
    {
        recognizer.CompleteGesture();
        recognizer.GestureSettings |= GestureSettings.ManipulationTranslateY | GestureSettings.ManipulationTranslateX;
        recognizer.GestureSettings ^= GestureSettings.ManipulationTranslateY;
    }

    // Modify the GestureSettings property to only allow movement on the Y axis
    public void LockToYAxis()
    {
        recognizer.CompleteGesture();
        recognizer.GestureSettings |= GestureSettings.ManipulationTranslateY | GestureSettings.ManipulationTranslateX;
        recognizer.GestureSettings ^= GestureSettings.ManipulationTranslateX;
    }

    // Modify the GestureSettings property to allow movement on both the X and Y axes
    public void MoveOnXAndYAxes()
    {
        recognizer.CompleteGesture();
        recognizer.GestureSettings |= GestureSettings.ManipulationTranslateX | GestureSettings.ManipulationTranslateY;
    }

    // Modify the GestureSettings property to enable or disable inertia based on the passed-in value
    public void UseInertia(bool inertia)
    {
        if (!inertia)
        {
            recognizer.CompleteGesture();
            recognizer.GestureSettings ^= GestureSettings.ManipulationTranslateInertia | GestureSettings.ManipulationRotateInertia;
        }
        else
        {
            recognizer.GestureSettings |= GestureSettings.ManipulationTranslateInertia | GestureSettings.ManipulationRotateInertia;
        }
    }

    public void Reset()
    {
        element.RenderTransform = null;
        recognizer.CompleteGesture();
        InitializeTransforms();
        recognizer.GestureSettings = GenerateDefaultSettings();
    }
}

サンプル

アーカイブされたサンプル

注釈

アプリの起動時に、適切な要素ごとにジェスチャ オブジェクトを作成できます。 ただし、作成する必要があるジェスチャ オブジェクトの数 (数百個のジグソーパズルなど) によっては、この方法は適切にスケーリングされない場合があります。

この場合、 ポインターダウン イベントでジェスチャ オブジェクトを動的に作成し、 MSGestureEnd イベントで破棄できます。 この方法は適切にスケーリングされますが、これらのオブジェクトの作成と解放によりオーバーヘッドが発生します。

または、再利用可能なジェスチャ オブジェクトのプールを静的に割り当てて動的に管理することもできます。

注意

このクラスはアジャイルではありません。つまり、スレッド モデルとマーシャリング動作を考慮する必要があります。 詳細については、「スレッド処理とマーシャリング (C++/CX)」および「マルチスレッド環境でのWindows ランタイム オブジェクトの使用 (.NET)」を参照してください。

クロススライド機能の使用方法の詳細については、「クロススライド のガイドライン」を参照してください。 クロススライド操作で使われるしきい値の距離を次の図に示します。

選択とドラッグ アンド ドロップのプロセスを示すスクリーン ショット。

PivotRadius プロパティと PivotCenter プロパティは、単一ポインター入力が検出された場合にのみ使用されます。 複数のポインター入力には影響しません。 これらのプロパティの値は、対話中に定期的に更新する必要があります。

回転は、 manipulationRotateGestureSettings プロパティを使用して設定されている場合にのみ、GestureRecognizer によってサポートされます。

PivotRadius の値が 0 に設定されている場合、単一ポインター入力では回転はサポートされません。

バージョン履歴

Windows のバージョン SDK バージョン 追加された値
2004 19041 HoldMaxContactCount
2004 19041 HoldMinContactCount
2004 19041 HoldRadius
2004 19041 HoldStartDelay
2004 19041 TapMaxContactCount
2004 19041 TapMinContactCount
2004 19041 TranslationMaxContactCount
2004 19041 TranslationMinContactCount

コンストラクター

GestureRecognizer()

GestureRecognizer オブジェクトの新しいインスタンスを初期化します。

プロパティ

AutoProcessInertia

慣性時の操作が自動的に生成されるかどうかを示す値を取得または設定します。

CrossSlideExact

スライド間操作の最初の接触から終了までの正確な距離を報告するかどうかを示す値を取得または設定します。既定では、クロススライド操作のためにシステムによって報告された最初の位置から小さな距離のしきい値が減算されます。 このフラグが設定されている場合、距離のしきい値は初期位置から減算されません。

注意

この距離しきい値は、初期検出後の接触のわずかな動きを考慮するためのものです。 これは、システムがクロススライディングとパンを区別するのに役立ち、タップ ジェスチャがどちらとしても解釈されないようにするのに役立ちます。

CrossSlideHorizontally

クロススライド軸が水平かどうかを示す値を取得または設定します。

CrossSlideThresholds

CrossSliding 相互作用の距離しきい値を示す値を取得または設定します。

GestureSettings

アプリケーションでサポートされているジェスチャと操作の設定を示す値を取得または設定します。

HoldMaxContactCount

Windows.UI.Input.GestureRecognizer.Holding イベントを認識するために必要な連絡先ポイントの最大数を取得または設定します。

HoldMinContactCount

Windows.UI.Input.GestureRecognizer.Holding イベントを認識するために必要な連絡先ポイントの最小数を取得または設定します。

HoldRadius

Windows.UI.Input.GestureRecognizer.Holding イベントで認識される連絡先ポイントの半径を取得または設定します。

HoldStartDelay

Windows.UI.Input.GestureRecognizer.Holding イベントに対して連絡先が認識される時間のしきい値を取得または設定します。

InertiaExpansion

慣性の開始から慣性終了までのオブジェクトのサイズの相対的な変化を示す値を取得または設定します (サイズ変更またはスケーリングが完了したとき)。

InertiaExpansionDeceleration

慣性の開始から慣性終了までの減速率を示す値を取得または設定します (サイズ変更または拡張操作が完了した場合)。

InertiaRotationAngle

慣性の最後のオブジェクトの回転角度 (回転操作が完了したとき) を示す値を取得または設定します。

InertiaRotationDeceleration

慣性の開始から慣性終了までの減速率 (回転操作が完了したとき) を示す値を取得または設定します。

InertiaTranslationDeceleration

慣性の開始から慣性終了までの減速率を示す値を取得または設定します (変換操作が完了したとき)。

InertiaTranslationDisplacement

慣性の開始から慣性終了までのオブジェクトの画面位置の相対的な変化を示す値を取得または設定します (変換操作が完了したとき)。

IsActive

相互作用が処理されているかどうかを示す値を取得します。

IsInertial

慣性中に操作がまだ処理されているかどうかを示す値を取得します (入力ポイントがアクティブでない)。

ManipulationExact

最初の接触から操作の終了までの正確な距離を報告するかどうかを示す値を取得または設定します。 既定では、システムによって報告された最初のデルタから小さな距離のしきい値が減算されます。 この距離しきい値は、タップ ジェスチャを処理する際の接触のわずかな動きを考慮するためのものです。 このフラグが設定されている場合、距離のしきい値は最初のデルタから減算されません。

MouseWheelParameters

マウス デバイスのホイール ボタンに関連付けられているプロパティのセットを取得します。

PivotCenter

単一ポインター入力が検出された場合の回転操作の中心点を取得または設定します。

PivotRadius

単一ポインター入力が検出されたときに回転操作を行うために、 ピボットセンター からポインター入力までの半径を取得または設定します。

ShowGestureFeedback

対話中に視覚的フィードバックを表示するかどうかを示す値を取得または設定します。

TapMaxContactCount

Windows.UI.Input.GestureRecognizer.Tapped イベントを認識するために必要な連絡先ポイントの最大数を取得または設定します。

TapMinContactCount

Windows.UI.Input.GestureRecognizer.Tapped イベントを認識するために必要な連絡先ポイントの最小数を取得または設定します。

TranslationMaxContactCount

翻訳 (またはパン) イベントを認識するために必要な連絡先ポイントの最大数を取得または設定します。

TranslationMinContactCount

翻訳 (またはパン) イベントを認識するために必要な連絡先ポイントの最小数を取得または設定します。

メソッド

CanBeDoubleTap(PointerPoint)

ダブルタップ ジェスチャの 2 回目のタップとしてタップを引き続き解釈できるかどうかを識別します。

CompleteGesture()

ジェスチャ認識エンジンが対話を終了させます。

ProcessDownEvent(PointerPoint)

ポインター入力を処理し、GestureSettings プロパティで指定されたジェスチャと操作のポインターダウン アクションに適した GestureRecognizer イベントを発生させます。

ProcessInertia()

慣性計算を実行し、さまざまな慣性イベントを発生させます。

ProcessMouseWheelEvent(PointerPoint, Boolean, Boolean)

ポインター入力を処理し、GestureSettings プロパティで指定されたジェスチャと操作のマウス ホイール アクションに適した GestureRecognizer イベントを発生させます。

ProcessMoveEvents(IVector<PointerPoint>)

ポインター入力を処理し、GestureSettings プロパティで指定されたジェスチャと操作のポインター移動アクションに適した GestureRecognizer イベントを発生させます。

ProcessUpEvent(PointerPoint)

ポインター入力を処理し、GestureSettings プロパティで指定されたジェスチャと操作のポインターアップ アクションに適した GestureRecognizer イベントを発生させます。

イベント

CrossSliding

ユーザーが、1 つの軸に沿ったパンのみをサポートするコンテンツ領域内で (1 回のタッチ接触を介して) スライド または スワイプ ジェスチャを実行したときに発生します。 ジェスチャは、このパン軸に対して垂直な方向で行う必要があります。

注意

スワイプは短いスライディング ジェスチャであり、長いスライド ジェスチャが距離しきい値を超えて再配置アクションが行われる間に、選択アクションが実行されます。 スワイプジェスチャとスライド ジェスチャを次の図に示します。 選択アクションとドラッグ アクションを示す図。

Dragging

ユーザーがマウスまたはペン/スタイラス (単一の連絡先) を使用して スライド または スワイプ ジェスチャを実行すると発生します。

Holding

ユーザーが (シングル タッチ、マウス、またはペン/スタイラスの接触を使用して) 長押しジェスチャを実行すると発生します。

ManipulationCompleted

入力ポイントが持ち上げられ、慣性による後続のすべてのモーション (平行移動、展開、または回転) が終了したときに発生します。

ManipulationInertiaStarting

操作中にすべての接触点が持ち上げられ、操作の速度が慣性動作を開始するのに十分な大きさである場合に発生します (入力ポインターがリフトされた後も移動、拡張、または回転が続行されます)。

ManipulationStarted

1 つ以上の入力ポイントが開始され、後続のモーション (平行移動、展開、または回転) が開始されたときに発生します。

ManipulationUpdated

1 つ以上の入力ポイントが開始され、その後のモーション (平行移動、展開、または回転) が進行中の後に発生します。

RightTapped

入力デバイスに関係なく、ポインター入力が右タップ ジェスチャとして解釈されるときに発生します。

  • マウスの右ボタンクリック
  • ペンバレルボタンクリック
  • タッチまたはペンで長押し
Tapped

ポインター入力がタップ ジェスチャとして解釈されるときに発生します。

適用対象

こちらもご覧ください