GestureRecognizer Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
- 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 mode interaksi pengguna
- Sampel visual fokus
- Sampel input dasar
- Sampel permainan Direct3D
- Sampel permainan DirectX dan XAML
Sampel yang diarsipkan
- Input: Sampel manipulasi dan gerakan
- Input: Sampel peristiwa input pengguna XAML
- Sampel pengguliran, penggeseran, dan pembesaran tampilan XAML
- Sampel input sentuh DirectX
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.
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. |
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.
|
Tapped |
Terjadi saat input pointer ditafsirkan sebagai gerakan ketukan. |