1

私はWPFでカスタムユーザーコントロールを開発しており、すべてのタッチイベントを自分のコントロールの外で受け取ろうとしています(そのため、ユーザーが別の場所をタップしてアクションをキャンセルする「タッチのキャンセル」を実装できます)。これを行う良い方法はありますか?明らかに、TouchDown またはその他のイベントを使用すると、コントロール内のタッチのみが通知されます。

PreviewTouchDownからイベントを受信しようとしましApplication.Current.MainWindowたが、ちょっと汚い感じがするだけでなく、うまく機能しません。これらのイベントをキャプチャするとすぐにSurfaceListBox、カスタム コントロールの内部が機能しなくなります (タッチを認識しなくなります)。

これを解決する良い方法はありますか?単純にすべてのタッチ イベントを受信するだけでも十分です。その後、それらが自分のコントロール内にあるかどうかを確認できます。

4

1 に答える 1

1

WPF では、イベントは要素のツリーを移動します。"Preview" で始まるイベントは、親から含まれる要素まで、一番下まで移動するイベントです。あなたの場合、 TouchDown イベントは、それが発生したコントロールから移動し、親に向かってバブルアップします。PreviewTouchDown は、親からコントロールに向かって反対方向に移動します。Application.Current.MainWindow で PreviewTouchDown イベントを処理するというあなたのアイデアは良いものであり、これが必要な場合はすべての PreviewTouchDown イベントを処理する必要があります。ただし、あなたの場合、イベントがカスタム コントロールで発生したかどうかを確認したい場合は、MainWindow ですべての TouchDown イベントをキャッチし、次のように Source プロパティを確認する必要があります。

private void CommonClickHandler(object sender, RoutedEventArgs e)
{
  FrameworkElement feSource = e.Source as FrameworkElement;
  if(feSource.Name == "MyCustomControlName")
  {
      //cancel whatever you want to cancel
      e.Handled=true;
  }
}

PreviewTouchDown イベントはキャッチしないでください。このイベントは最初に MainWindow に表示され、その後すぐにコントロールに渡されます。 このmsdn リンクで詳細情報が得られます: http://msdn.microsoft.com/en-us/library/ms742806.aspx

于 2012-08-20T16:39:07.320 に答える