Обработка Swipe Guesture в Windows 8 Grid

Я пытаюсь реализовать пользовательский элемент управления, который состоит из сетки с некоторыми элементами холста в качестве дочерних элементов. Когда в сетке выполняется действие салфетки, я намерен предварительно выполнить некоторую операцию с элементами холста. Я не могу обработать салфетки для сетки, я опубликовал то же самое в msdn - win8 Dev форум

Ответы

Ответ 1

Я был в одной лодке, как вы, ребята, так как не было никаких образцов там, где это было сделано, но после ознакомления и изучения документации MSDN о том, как жест жестка реализован в приложении Windows 8 Store с помощью С# это то, что я придумал (и он работает для моего приложения, которое требует прокрутки вверх/вниз/влево/вправо):

Прежде всего, вместо GestureRecognizer необходимо использовать события Manipulation, поэтому на сетке, которую вы хотите обработать с помощью swiping (позволяет вам сказать, что вы делаете это так, чтобы он воспринимал весь экран так, чтобы он интерпретировал жесты ) выполните следующие действия:

Я назвал свою сетку swipingSurface, и я обрабатываю режимы манипуляции как по оси Y, так и по оси X:

swipingSurface.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY;

Затем подключите события манипуляции, о которых вы хотите получить уведомление, в моем случае я просто хочу знать, что началась манипуляция и когда она закончилась:

swipingSurface.ManipulationStarted += OnManipulationStarted;
swipingSurface.ManipulationCompleted += OnManipulationCompleted;

Сделайте все, что захотите, при запуске манипуляции, например, получите начальную точку, если хотите. Но фактический трюк находится в событии ManipulationCompleted, в котором вам нужно получить скорости, связанные с вашим жестом, следующим образом:

public void OnManipulationCompleted(object sender, ManipulationCompletedEventArgs e) {
    var velocities = e.Velocities;      
}

Свойство ManipulationCompletedEventArgs Velocities вернет структуру типа ManipulationVelocities, которая содержит другие свойства внутри:

- Angular: скорость вращения в градусах на миллисекунду.

-Expansion: расширение или масштабирование скорости в DIP за миллисекунду.

-Linear: скорость прямой линии в DIP за миллисекунду.

Я действительно смотрю на скорость Линейная, которая представляет собой Точка, которая содержит значения X и Y, указывающие направление, в котором был выполнен жест; например, если салфетка была направлена ​​вверх, вы заметите, что значение Y положительно, и если его значение вниз отрицательно; то же самое относится к значению X, если салфетка оставлена, значения X отрицательны, и если салфетка правильная, значения X положительны, поэтому вы можете играть с этими значениями и проверять направление развертки, конечные точки и т.д..

Надеюсь, что это поможет.

Ответ 2

Вы можете попытаться настроить ManipulationMode на свой собственный способ управления и манипулировать событиями Manipulation ~. Обратите внимание, что некоторые элементы управления могут перестать накатывать события пользовательского интерфейса, поэтому, если вы скажете, что вы используете свой контроль внутри кнопки или ScrollViewer, события могут не работать.

Ответ 3

Вы можете проверить SwipeHintThemeAnimation, который использует GestureRecognizer, чтобы подключиться к элементу управления Rectangle или изменить его для использования вашего элемента управления сеткой, см. документацию.