Жесты являются одним из ключевых способов взаимодействия пользователя и приложения в Windows Phone 7. Это стало возможным благодаря наличию мультитач экранов с 4 касаниями (как минимум) во всех аппаратах на Windows Phone 7. Стандартные элементы управления уже содержат обработчики жестов. Однако, иногда необходимо добавить собственную логику для обработки жестов. В этой заметке будет рассказано о том, как добавить свою логику обработки жестов за несколько шагов.
Список всех доступных жестов подробно описан в соответствующем разделе MSDN, вот только некоторые, наиболее популярные из них:



Для обработки манипуляций каждый элемент управления имеет три события:
ManipulationStarted
– генерируется при начале выполнения какого-либо жеста;ManipulationDelta
– генерируется периодически в процессе выполнения жеста (позволяет отследить относительное смещение);ManipulationCompleted
– генерируется в момент завершения жеста (пользователь оторвал пальцы от экрана).
Можно построить несложную математическую модель для отслеживания жестов на основе этих событий. Однако, более простой способ обрабатывать жесты — использовать объект GestureService
из Windows Phone 7 Toolkit. Этот объект отслеживает стандартные жесты и позволяет подписаться на соответствующие события.
Для использования GestureService
следует добавить ссылку на сборку Microsoft.Phone.Controls.Toolkit.dll
, в которой и находится нужный объект. После этого следует добавить соответствующее пространство имен в определение страницы:
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
Теперь можно добавить обработку жестов для элементов управления. Например, создадим элемент Rectangle
и добавим обработку жеста Hold
:
<Rectangle Fill="Green">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener Hold="OnHoldHandler" />
</toolkit:GestureService.GestureListener>
</Rectangle>
В коде страницы должен быть обработчик с именем OnHoldHandler
:
private void GestureListener_Hold(object sender, GestureEventArgs e)
{
// ...
}
Теперь при обнаружении жеста Hold
будет срабатывать заданный обработчик.