GestureRecognizer Kelas

Definisi

Menyediakan gerakan dan pengenalan manipulasi, pendengar peristiwa, dan pengaturan.

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
Warisan
Object Platform::Object IInspectable GestureRecognizer
Atribut

Persyaratan Windows

Rangkaian perangkat
Windows 10 (diperkenalkan dalam 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (diperkenalkan dalam v1.0)

Contoh

Di sini kami menyiapkan objek GestureRecognizer dengan kumpulan penanganan aktivitas input untuk memproses input pointer dan gerakan. Untuk informasi selengkapnya tentang cara mendengarkan dan menangani peristiwa Windows Runtime, lihat Gambaran umum Peristiwa dan peristiwa yang dirutekan. Lihat Sampel input dasar untuk implementasi lengkap.

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();
    }
}

Sampel

Sampel yang diarsipkan

Keterangan

Anda dapat membuat objek gerakan untuk setiap elemen yang sesuai saat aplikasi dimulai. Namun, pendekatan ini mungkin tidak menskalakan dengan baik tergantung pada jumlah objek gerakan yang perlu Anda buat (misalnya, teka-teki jigsaw dengan ratusan potongan).

Dalam hal ini, Anda dapat membuat objek gerakan secara dinamis pada peristiwa pointerdown dan menghancurkannya pada peristiwa MSGestureEnd . Pendekatan ini menskalakan dengan baik, tetapi menimbulkan beberapa overhead karena membuat dan melepaskan objek-objek ini.

Atau, Anda dapat secara statis mengalokasikan dan mengelola kumpulan objek gerakan yang dapat digunakan kembali secara dinamis.

Catatan

Kelas ini tidak lincah, yang berarti Anda perlu mempertimbangkan model utas dan perilaku marshalingnya. Untuk informasi selengkapnya, lihat Threading dan Marshaling (C++/CX) dan Menggunakan objek Windows Runtime di lingkungan multithreaded (.NET).

Untuk detail selengkapnya tentang cara menggunakan fungsionalitas lintas slide, lihat Panduan untuk slide silang. Jarak ambang batas yang digunakan oleh interaksi lintas slide diperlihatkan dalam diagram berikut.

Cuplikan layar memperlihatkan proses pilih dan seret dan letakkan.

Properti PivotRadius dan PivotCenter hanya digunakan saat input pointer tunggal terdeteksi. Mereka tidak berpengaruh pada beberapa input pointer. Nilai untuk properti ini harus diperbarui secara teratur selama interaksi.

Rotasi didukung oleh GestureRecognizer hanya ketika manipulationRotate diatur melalui properti GestureSettings .

Rotasi tidak didukung untuk input pointer tunggal jika nilai PivotRadius diatur ke 0.

Riwayat versi

Versi Windows Versi SDK Nilai ditambahkan
2004 19041 HoldMaxContactCount
2004 19041 HoldMinContactCount
2004 19041 HoldRadius
2004 19041 HoldStartDelay
2004 19041 TapMaxContactCount
2004 19041 TapMinContactCount
2004 19041 TranslationMaxContactCount
2004 19041 TranslationMinContactCount

Konstruktor

GestureRecognizer()

Menginisialisasi instans baru objek GestureRecognizer .

Properti

AutoProcessInertia

Mendapatkan atau menetapkan nilai yang menunjukkan apakah manipulasi selama inertia dihasilkan secara otomatis.

CrossSlideExact

Mendapatkan atau menetapkan nilai yang menunjukkan apakah jarak yang tepat dari kontak awal ke akhir interaksi lintas slide dilaporkan. Secara default, ambang jarak kecil dikurangi dari posisi pertama yang dilaporkan oleh sistem untuk interaksi lintas slide. Jika bendera ini diatur, ambang batas jarak tidak dikurangi dari posisi awal.

Catatan

Ambang jarak ini dimaksudkan untuk mempertangungjawabkan sedikit pergerakan kontak setelah deteksi awal. Ini membantu sistem membedakan antara geser silang dan menggeser, dan membantu memastikan bahwa gerakan ketukan juga tidak ditafsirkan.

CrossSlideHorizontally

Mendapatkan atau mengatur nilai yang menunjukkan apakah sumbu lintas slide adalah horizontal.

CrossSlideThresholds

Mendapatkan atau menetapkan nilai yang menunjukkan ambang jarak untuk interaksi CrossSliding .

GestureSettings

Mendapatkan atau menetapkan nilai yang menunjukkan pengaturan gerakan dan manipulasi yang didukung oleh aplikasi.

HoldMaxContactCount

Mendapatkan atau mengatur jumlah maksimum titik kontak yang diperlukan untuk mengenali peristiwa Windows.UI.Input.GestureRecognizer.Holding .

HoldMinContactCount

Mendapatkan atau mengatur jumlah minimum titik kontak yang diperlukan untuk mengenali peristiwa Windows.UI.Input.GestureRecognizer.Holding .

HoldRadius

Mendapatkan atau mengatur radius titik kontak yang dikenali untuk peristiwa Windows.UI.Input.GestureRecognizer.Holding .

HoldStartDelay

Mendapatkan atau mengatur ambang waktu di mana kontak dikenali untuk peristiwa Windows.UI.Input.GestureRecognizer.Holding .

InertiaExpansion

Mendapatkan atau menetapkan nilai yang menunjukkan perubahan relatif ukuran objek dari awal inertia ke akhir inertia (saat mengubah ukuran, atau penskalaan, selesai).

InertiaExpansionDeceleration

Mendapatkan atau menetapkan nilai yang menunjukkan tingkat perlemahan dari awal inertia ke akhir inertia (ketika mengubah ukuran, atau ekspansi, manipulasi selesai).

InertiaRotationAngle

Mendapatkan atau menetapkan nilai yang menunjukkan sudut akhir rotasi objek di akhir inertia (ketika manipulasi rotasi selesai).

InertiaRotationDeceleration

Mendapatkan atau menetapkan nilai yang menunjukkan tingkat perlemahan dari awal inertia ke akhir inertia (ketika manipulasi rotasi selesai).

InertiaTranslationDeceleration

Mendapatkan atau menetapkan nilai yang menunjukkan tingkat perlemahan dari awal inertia ke akhir inertia (ketika manipulasi terjemahan selesai).

InertiaTranslationDisplacement

Mendapatkan atau menetapkan nilai yang menunjukkan perubahan relatif di lokasi layar objek dari awal inertia hingga akhir inertia (ketika manipulasi terjemahan selesai).

IsActive

Mendapatkan nilai yang menunjukkan apakah interaksi sedang diproses.

IsInertial

Mendapatkan nilai yang menunjukkan apakah manipulasi masih diproses selama inertia (tidak ada titik input yang aktif).

ManipulationExact

Mendapatkan atau menetapkan nilai yang menunjukkan apakah jarak yang tepat dari kontak awal ke akhir interaksi dilaporkan. Secara default, ambang jarak kecil dikurangi dari delta pertama yang dilaporkan oleh sistem. Ambang jarak ini dimaksudkan untuk mempertangungjawabkan sedikit pergerakan kontak saat memproses gerakan ketukan. Jika bendera ini diatur, ambang batas jarak tidak dikurangi dari delta pertama.

MouseWheelParameters

Mendapatkan sekumpulan properti yang terkait dengan tombol roda perangkat mouse.

PivotCenter

Mendapatkan atau mengatur titik tengah untuk interaksi rotasi saat input penunjuk tunggal terdeteksi.

PivotRadius

Mendapatkan atau mengatur radius, dari PivotCenter ke input penunjuk, untuk interaksi rotasi saat input penunjuk tunggal terdeteksi.

ShowGestureFeedback

Mendapatkan atau menetapkan nilai yang menunjukkan apakah umpan balik visual ditampilkan selama interaksi.

TapMaxContactCount

Mendapatkan atau mengatur jumlah maksimum titik kontak yang diperlukan untuk mengenali peristiwa Windows.UI.Input.GestureRecognizer.Tapped .

TapMinContactCount

Mendapatkan atau mengatur jumlah minimum titik kontak yang diperlukan untuk mengenali peristiwa Windows.UI.Input.GestureRecognizer.Tapped .

TranslationMaxContactCount

Mendapatkan atau mengatur jumlah maksimum titik kontak yang diperlukan untuk mengenali peristiwa terjemahan (atau panning).

TranslationMinContactCount

Mendapatkan atau mengatur jumlah minimum titik kontak yang diperlukan untuk mengenali peristiwa terjemahan (atau panning).

Metode

CanBeDoubleTap(PointerPoint)

Mengidentifikasi apakah ketukan masih dapat ditafsirkan sebagai ketukan kedua dari gerakan ketuk dua kali.

CompleteGesture()

Menyebabkan pengenal gerakan menyelesaikan interaksi.

ProcessDownEvent(PointerPoint)

Memproses input penunjuk dan meningkatkan peristiwa GestureRecognizer yang sesuai dengan tindakan penunjuk ke bawah untuk gerakan dan manipulasi yang ditentukan oleh properti GestureSettings .

ProcessInertia()

Melakukan perhitungan inertia dan meningkatkan berbagai peristiwa inertia.

ProcessMouseWheelEvent(PointerPoint, Boolean, Boolean)

Memproses input pointer dan meningkatkan peristiwa GestureRecognizer yang sesuai dengan tindakan roda mouse untuk gerakan dan manipulasi yang ditentukan oleh properti GestureSettings .

ProcessMoveEvents(IVector<PointerPoint>)

Memproses input penunjuk dan meningkatkan peristiwa GestureRecognizer yang sesuai dengan tindakan pemindahan pointer untuk gerakan dan manipulasi yang ditentukan oleh properti GestureSettings .

ProcessUpEvent(PointerPoint)

Memproses input penunjuk dan meningkatkan peristiwa GestureRecognizer yang sesuai dengan tindakan pointer up untuk gerakan dan manipulasi yang ditentukan oleh properti GestureSettings .

Acara

CrossSliding

Terjadi ketika pengguna melakukan gerakan geser atau geser (melalui satu kontak sentuhan) dalam area konten yang mendukung pengalihan di sepanjang sumbu tunggal saja. Gerakan harus terjadi ke arah yang tidak dapat ditegakkan oleh sumbu panning ini.

Catatan

Geser adalah gerakan geser pendek yang menghasilkan tindakan pemilihan sementara gerakan slide yang lebih panjang melewati ambang jarak dan menghasilkan tindakan susun ulang. Gerakan geser dan slide ditunjukkan dalam diagram berikut. Diagram memperlihatkan tindakan pilih dan seret.

Dragging

Terjadi saat pengguna melakukan gerakan geser atau geser dengan mouse atau pena/stylus (kontak tunggal).

Holding

Terjadi ketika pengguna melakukan gerakan tekan dan tahan (dengan satu sentuhan, mouse, atau kontak pena/stylus).

ManipulationCompleted

Terjadi ketika titik input diangkat dan semua gerakan berikutnya (terjemahan, ekspansi, atau rotasi) melalui inertia telah berakhir.

ManipulationInertiaStarting

Terjadi ketika semua titik kontak diangkat selama manipulasi dan kecepatan manipulasi cukup signifikan untuk memulai perilaku inertia (terjemahan, ekspansi, atau rotasi berlanjut setelah penunjuk input diangkat).

ManipulationStarted

Terjadi ketika satu atau beberapa titik input telah dimulai dan gerakan berikutnya (terjemahan, ekspansi, atau rotasi) telah dimulai.

ManipulationUpdated

Terjadi setelah satu atau beberapa titik input dimulai dan gerakan berikutnya (terjemahan, ekspansi, atau rotasi) sedang berlangsung.

RightTapped

Terjadi saat input pointer ditafsirkan sebagai gerakan ketuk kanan, terlepas dari perangkat input.

  • Klik tombol mouse kanan
  • Klik tombol laras pena
  • Sentuh atau tekan dan tahan pena
Tapped

Terjadi saat input pointer ditafsirkan sebagai gerakan ketukan.

Berlaku untuk

Lihat juga