Ручка "Проведите пальцем вверх", "Проведите вниз", "Проведите пальцем по левому краю" и "Жмем" в приложении WinRT
У меня есть следующий код:
public MainPage()
{
this.InitializeComponent();
this.ManipulationStarting += MainPage_ManipulationStarting;
this.ManipulationStarted += MainPage_ManipulationStarted;
this.ManipulationInertiaStarting += MainPage_ManipulationInertiaStarting;
this.ManipulationDelta += MainPage_ManipulationDelta;
this.ManipulationCompleted += MainPage_ManipulationCompleted;
}
void MainPage_ManipulationStarting(object sender, ManipulationStartingRoutedEventArgs e)
{
Debug.WriteLine("MainPage_ManipulationStarting");
}
void MainPage_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
Debug.WriteLine("MainPage_ManipulationStarted");
}
void MainPage_ManipulationInertiaStarting(object sender, ManipulationInertiaStartingRoutedEventArgs e)
{
Debug.WriteLine("MainPage_ManipulationInertiaStarting");
}
void MainPage_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
Debug.WriteLine("MainPage_ManipulationDelta");
}
void MainPage_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
{
Debug.WriteLine("MainPage_ManipulationCompleted");
}
Но я понятия не имею, как использовать события Manipulation. Можете ли вы описать, как обрабатывать жесты, прокручивать вверх, вниз, влево и вправо?
Ответы
Ответ 1
События манипуляции предоставляют вам значения перевода. Манипуляция Delta будет срабатывать непрерывно, пока ваша манипуляция не завершится вместе с инерцией. В этом случае проверьте, является ли движение инерционным (нормальный ход не следует рассматривать как салфетки) и обнаруживает разницу между начальной и текущей позицией.
Как только он достигнет порогового значения, запустите прокрутку вверх/вниз/влево/вправо. И немедленно прекратите манипуляцию, чтобы не запускать одно и то же событие снова и снова.
Следующий код поможет вам,
private Point initialpoint;
private void Grid_ManipulationStarted_1(object sender, ManipulationStartedRoutedEventArgs e)
{
initialpoint = e.Position;
}
private void Grid_ManipulationDelta_1(object sender, ManipulationDeltaRoutedEventArgs e)
{
if (e.IsInertial)
{
Point currentpoint = e.Position;
if (currentpoint.X - initialpoint.X >= 500)//500 is the threshold value, where you want to trigger the swipe right event
{
System.Diagnostics.Debug.WriteLine("Swipe Right");
e.Complete();
}
}
}
Ответ 2
Я попробовал ответить любовником XAML, но это было не так точно для меня (IsIntertial всегда возвращался мне под фальшь). Я реализовал что-то другое (я ответил на предыдущий пост связанной темы здесь Обработка Swipe Guesture в Windows 8 Grid) для всех, кто хотел попробовать что-то другое.
Ответ 3
Взгляните на GestureRecognizer. Событие CrossSliding.
Существует также EdgeGesture класс и образцы: Пример EdgeGesture, пример жестов.