Ответ 1
Если вы заметите, что класс MainPage имеет свои собственные события манипуляции, которые вы можете использовать, не создавая отдельный GestureRecognizer
. Вы можете включить его, установив this.ManipulationMode
на ManipulationModes.All
. Это позволит вам видеть ответы на события MainPages Tapped
, RightTapped
, ManipulationStarting
, ManipulationStarted
, ManipulationDelta
и ManipulationCompleted
.
Что касается того, чтобы GestureRecongnizer работал в соответствии с этим Blog, и этот Публикация форума MSDN вам нужно будет обрабатывать события MainPage PointerMoved
, PointerReleased
и PointerPressed
.
Windows.UI.Input.GestureRecognizer gr = new Windows.UI.Input.GestureRecognizer();
public MainPage()
{
this.InitializeComponent();
this.PointerPressed += MainPage_PointerPressed;
this.PointerMoved += MainPage_PointerMoved;
this.PointerReleased += MainPage_PointerReleased;
gr.CrossSliding += gr_CrossSliding;
gr.Dragging += gr_Dragging;
gr.Holding += gr_Holding;
gr.ManipulationCompleted += gr_ManipulationCompleted;
gr.ManipulationInertiaStarting += gr_ManipulationInertiaStarting;
gr.ManipulationStarted += gr_ManipulationStarted;
gr.ManipulationUpdated += gr_ManipulationUpdated;
gr.RightTapped += gr_RightTapped;
gr.Tapped += gr_Tapped;
gr.GestureSettings = Windows.UI.Input.GestureSettings.ManipulationRotate | Windows.UI.Input.GestureSettings.ManipulationTranslateX | Windows.UI.Input.GestureSettings.ManipulationTranslateY |
Windows.UI.Input.GestureSettings.ManipulationScale | Windows.UI.Input.GestureSettings.ManipulationRotateInertia | Windows.UI.Input.GestureSettings.ManipulationScaleInertia |
Windows.UI.Input.GestureSettings.ManipulationTranslateInertia | Windows.UI.Input.GestureSettings.Tap;
}
void MainPage_PointerReleased(object sender, PointerRoutedEventArgs e)
{
var ps = e.GetIntermediatePoints(null);
if (ps != null && ps.Count > 0)
{
gr.ProcessUpEvent(ps[0]);
e.Handled = true;
gr.CompleteGesture();
}
}
void MainPage_PointerMoved(object sender, PointerRoutedEventArgs e)
{
gr.ProcessMoveEvents(e.GetIntermediatePoints(null));
e.Handled = true;
}
void MainPage_PointerPressed(object sender, PointerRoutedEventArgs e)
{
var ps = e.GetIntermediatePoints(null);
if (ps != null && ps.Count > 0)
{
gr.ProcessDownEvent(ps[0]);
e.Handled = true;
}
}
В соответствии с Документация вам необходимо включить CrossSlide Событие, добавив его в свой GestureRecongnizer и настроив CrossSlideThresholds и Direction. Из последней ссылки:
CrossSlide должен быть установлен в свойстве GestureSettings для поддержки CrossSliding. По умолчанию пороговые значения CrossSliding отключены. Используйте CrossSlideThresholds для установки этих значений.
Пример:
Windows.UI.Input.CrossSlideThresholds cst = new Windows.UI.Input.CrossSlideThresholds();
cst.SelectionStart = 2;
cst.SpeedBumpStart = 3;
cst.SpeedBumpEnd = 4;
cst.RearrangeStart = 5;
gr.CrossSlideHorizontally = true;
gr.CrossSlideThresholds = cst;
gr.CrossSliding += gr_CrossSliding;
и убедитесь, что он добавлен в ваш GestureSettings
gr.GestureSettings = Windows.UI.Input.GestureSettings.ManipulationRotate | Windows.UI.Input.GestureSettings.ManipulationTranslateX |
Windows.UI.Input.GestureSettings.ManipulationScale | Windows.UI.Input.GestureSettings.ManipulationRotateInertia |
Windows.UI.Input.GestureSettings.ManipulationScaleInertia | Windows.UI.Input.GestureSettings.ManipulationTranslateInertia |
Windows.UI.Input.GestureSettings.Tap | Windows.UI.Input.GestureSettings.CrossSlide;