まあ、私はそれが非常にハックだと感じています (ほとんどのソリューションは使用可能な WinRT アプリ用のようです) が、List<uint>現在画面上でダウンしているポインターの数を追跡するために を作成できます。ポインタが押されたときにポインタを「キャプチャ」するにPointerPressedは、操作しているコントロール ( を使用しているとしましょう) でイベントを処理する必要があります。Canvasそこに を入力しList<uint>ます。ManipulationCompletedイベントの終了時にリストをクリアするのを忘れないでPointerReleasedください。イベントでリストがクリアされていることを確認することをお勧めします。おそらく、それを試してみて、それがどのように機能するかを確認してください。PointerCanceledPointerCaptureLostManipulationStarted
イベントではManipulationCompleted、リストに正確に 2 つの要素 (PointerIds) が含まれているかどうかを確認できます。もしそうなら、あなたはそれがピンチ/ズームであることを知っています.
これは次のようになります。
private void Canvas_PointerPressed(object sender, PointerRoutedEventArgs e)
{
var ps = e.GetIntermediatePoints(null);
if (ps != null && ps.Count > 0)
{
this.gestureRecognizer.ProcessDownEvent(ps[0]);
this.pointerList.Add(e.Pointer.PointerId);
e.Handled = true;
}
}
private void gestureRecognizer_ManipulationCompleted(GestureRecognizer sender, ManipulationCompletedEventArgs args)
{
if (this.pointerList.Count == 2)
{
// This could be your pinch or zoom.
}
else
{
// This could be your drag.
}
// Don't forget to clear the list.
this.pointerList.Clear();
}
// Make sure you clear your list in whatever events make sense.
private void Canvas_PointerReleased(object sender, PointerRoutedEventArgs e)
{
this.pointerList.Clear();
}
private void Canvas_PointerCanceled(object sender, PointerRoutedEventArgs e)
{
this.pointerList.Clear();
}