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
- Наследование
- Атрибуты
Требования к 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();
}
}
Примеры
- Пример режима взаимодействия с пользователем
- Пример визуальных элементов фокуса
- Пример базового ввода
- Пример игры Direct3D
- Пример игры DirectX и XAML
Архивные примеры
- Входные данные: пример манипуляций и жестов
- Ввод: пример событий пользовательского ввода на XAML
- Пример прокрутки, сдвига и масштабирования XAML
- Пример сенсорного ввода в DirectX
Комментарии
Вы можете создать объект жеста для каждого соответствующего элемента при запуске приложения. Однако этот подход может не очень хорошо масштабироваться в зависимости от количества объектов жестов, которые необходимо создать (например, головоломка с сотнями частей).
В этом случае можно динамически создавать объекты жестов в событии указателя и уничтожать их в событии MSGestureEnd . Такой подход хорошо масштабируется, но приводит к некоторым издержкам из-за создания и освобождения этих объектов.
Кроме того, можно статически выделять и динамически управлять пулом многократно используемых объектов жестов.
Примечание
Этот класс не является гибким, что означает, что необходимо учитывать его потоковую модель и поведение маршалинга. Дополнительные сведения см. в разделах Потоки и маршалинг (C++/CX) и Использование объектов среда выполнения Windows в многопоточной среде (.NET).
Дополнительные сведения об использовании функций перекрестного слайда см. в разделе Рекомендации по перекрестному слайду. Пороговые расстояния, используемые при взаимодействии в форме скольжения по диагонали, показаны на схеме ниже.
Свойства PivotRadius и PivotCenter используются только при обнаружении входных данных с одним указателем. Они не влияют на ввод нескольких указателей. Значение этих свойств должно регулярно обновляться во время взаимодействия.
Поворот поддерживается GestureRecognizer только в том случае, если manipulationRotate задается с помощью свойства GestureSettings .
Поворот не поддерживается для входных данных с одним указателем, если значение 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 |
Возвращает или задает радиус от центра PivotCenter до входных данных указателя для взаимодействия с поворотом при обнаружении одного входного указателя. |
ShowGestureFeedback |
Возвращает или задает значение, указывающее, отображается ли визуальная обратная связь во время взаимодействия. |
TapMaxContactCount |
Возвращает или задает максимальное количество точек контакта, необходимое для распознавания события Windows.UI.Input.GestureRecognizer.Tapped . |
TapMinContactCount |
Возвращает или задает минимальное количество точек контакта, необходимое для распознавания события Windows.UI.Input.GestureRecognizer.Tapped . |
TranslationMaxContactCount |
Возвращает или задает максимальное количество точек контакта, необходимое для распознавания события преобразования (или сдвига). |
TranslationMinContactCount |
Возвращает или задает минимальное количество точек контакта, необходимое для распознавания события преобразования (или сдвига). |
Методы
CanBeDoubleTap(PointerPoint) |
Определяет, можно ли интерпретировать касание как второе касание жеста двойного касания. |
CompleteGesture() |
Заставляет распознаватель жестов завершить взаимодействие. |
ProcessDownEvent(PointerPoint) |
Обрабатывает входные данные указателя и вызывает события GestureRecognizer , соответствующие действию указателя вниз для жестов и манипуляций, заданных свойством GestureSettings . |
ProcessInertia() |
Выполняет вычисления инерции и вызывает различные события инерции. |
ProcessMouseWheelEvent(PointerPoint, Boolean, Boolean) |
Обрабатывает входные данные указателя и вызывает события GestureRecognizer , соответствующие действию колесика мыши для жестов и манипуляций, заданных свойством GestureSettings . |
ProcessMoveEvents(IVector<PointerPoint>) |
Обрабатывает входные данные указателя и вызывает события GestureRecognizer , соответствующие действию перемещения указателя для жестов и манипуляций, заданных свойством GestureSettings . |
ProcessUpEvent(PointerPoint) |
Обрабатывает входные данные указателя и вызывает события GestureRecognizer , соответствующие действию указателя вверх для жестов и манипуляций, заданных свойством GestureSettings . |
События
CrossSliding |
Происходит, когда пользователь выполняет слайд или жест прокрутки (через один сенсорный контакт) в области содержимого, которая поддерживает сдвиг только по одной оси. Жест должен выполняться в направлении, перпендикулярном этой оси сдвига. Примечание Прокрутка — это короткий жест скользящего движения, который приводит к выделению, в то время как жест более длинного слайда пересекает пороговое значение расстояния и приводит к переупорядочению действия. Жесты прокрутки и скольжения показаны на следующей схеме. |
Dragging |
Происходит, когда пользователь выполняет слайд или жест прокрутки с помощью мыши, пера или пера (один контакт). |
Holding |
Происходит при выполнении пользователем жеста нажатия и удержания (одним касанием, мышью или контактом пера или пера). |
ManipulationCompleted |
Происходит, когда входные точки поднимаются и все последующие движения (преобразование, расширение или поворот) через инерцию заканчиваются. |
ManipulationInertiaStarting |
Происходит, когда во время манипуляции поднимаются все точки контакта и скорость манипуляции достаточно значительна, чтобы инициировать поведение инерции (преобразование, расширение или поворот продолжаются после подъема входных указателей). |
ManipulationStarted |
Происходит при инициировании одной или нескольких входных точек и начале последующего движения (преобразование, расширение или поворот). |
ManipulationUpdated |
Происходит после запуска одной или нескольких точек ввода и последующего перемещения (преобразования, расширения или поворота). |
RightTapped |
Происходит, когда входные данные указателя интерпретируются как жест касания правой кнопкой мыши, независимо от устройства ввода.
|
Tapped |
Происходит, когда входные данные указателя интерпретируются как жест касания. |