まあ、私はそれが非常にハックだと感じています (ほとんどのソリューションは使用可能な WinRT アプリ用のようです) が、List<uint>
現在画面上でダウンしているポインターの数を追跡するために を作成できます。ポインタが押されたときにポインタを「キャプチャ」するにPointerPressed
は、操作しているコントロール ( を使用しているとしましょう) でイベントを処理する必要があります。Canvas
そこに を入力しList<uint>
ます。ManipulationCompleted
イベントの終了時にリストをクリアするのを忘れないでPointerReleased
ください。イベントでリストがクリアされていることを確認することをお勧めします。おそらく、それを試してみて、それがどのように機能するかを確認してください。PointerCanceled
PointerCaptureLost
ManipulationStarted
イベントでは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();
}