Как использовать GestureService и добавить обработчики жестов из кода

В Windows Phone 7 Toolkit доступен объект для обработки жестов – GestureService. Как известно, этот сервис позволяет обрабатывать стандартные для Windows Phone 7 жесты. Однако, многие примеры использования GestureService сводятся к применению его в XAML. В этой небольшой заметке я покажу как использовать GestureService из кода.

Для начала работы нам необходимо подключить Windows Phone 7 Toolkit к проекту. Для этого нужно добавить ссылку на сборку Microsoft.Phone.Controls.Toolkit.dll.

Как использовать GestureService из кода

Для использования GestureService из кода, нам нужно получить доступ к объекту GestureListener, который будет ассоциирован с некоторой областью на экране. В рамках этой области (source) будут отслеживаться наши жесты.

var listener = GestureService.GetGestureListener(source);

Объект GestureListener готов к работе, теперь можно обрабатывать его жесты.

Как добавить обработчик жестов

Для обработки конкретного жеста следует подписаться на соответствующее событие объекта GestureListener:

listener.Tap += OnTapHandler;

Безусловно можно подписаться и на другие жесты, используя аналогичный подход.

Где разместить код обработки жестов

Подписываться на события жестов можно в любой момент после создания соответствующих элементов управления. Например, это можно делать в конструкторе страницы (конечно, более правильно это делать во ViewModel, но сейчас мы не будем усложнять пример). Например, следующий код создает новый элемент управления (Rectangle) на странице и добавляет для него обработчик жестов.

public partial class Page1 : PhoneApplicationPage
{
    Rectangle _source;

    public MainPage()
    {
        InitializeComponent();
        _source = new Rectangle {Height = 200, Width = 200, Fill = new SolidColorBrush(Colors.Green)};
        ContentPanel.Children.Add(_source);
         
        var listener = GestureService.GetGestureListener(_source);
        listener.Tap += OnTapHandler;
    }
 
    private void OnTapHandler(object sender, GestureEventArgs e)
    {
        _source.Fill = new SolidColorBrush(Colors.Yellow);
    }
}