rus | eng
PDF Печать RSS
Как обрабатывать жесты в Windows Phone 7  

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

Список всех доступных жестов подробно описан в соответствующем разделе MSDN, вот только некоторые, наиболее популярные из них:

  • Нажатие (Tap)
    image
  • Двойное нажатие (Double Tap):
    image
  • Нажатие и удержание (Touch and Hold):
    image

Для обработки манипуляций каждый элемент управления имеет три события:

  • 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 будет срабатывать заданный обработчик.

30.10.2011 10:36 UTC+4

Сергей Звездин

Сергей Звездин

Сергей Звездин: занимается разработкой программного обеспечения на платформе Microsoft .NET. Является обладателем статусов Microsoft MVP и Microsoft Regional Director.

Читать дальше →

Записи

  • Архив
  • Обсуждаемые

Twitter

Most Valuable Professional (MVP) Microsoft Regional Director