Я пытаюсь реализовать пользовательский элемент управления, который состоит из сетки с некоторыми элементами холста в качестве дочерних элементов. Когда в сетке выполняется действие салфетки, я намерен предварительно выполнить некоторую операцию с элементами холста. Я не могу обработать салфетки для сетки, я опубликовал то же самое в msdn - win8 Dev форум
Обработка Swipe Guesture в Windows 8 Grid
Ответ 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 или изменить его для использования вашего элемента управления сеткой, см. документацию.