WPFはかなり新しいですが、ウィンドウ内や子コントロールに誰かが触れたときはいつでもキャプチャしようとしています。
ウィンドウのクリックイベントをキャプチャすると、ウィンドウの内部スペースのみがクリックをキャプチャします。子コントロールはそうではありません。
フルサイズウィンドウの画面のどこでもクリック/タッチイベントを再帰的にキャプチャするにはどうすればよいですか?
よろしくお願いします
WPFはかなり新しいですが、ウィンドウ内や子コントロールに誰かが触れたときはいつでもキャプチャしようとしています。
ウィンドウのクリックイベントをキャプチャすると、ウィンドウの内部スペースのみがクリックをキャプチャします。子コントロールはそうではありません。
フルサイズウィンドウの画面のどこでもクリック/タッチイベントを再帰的にキャプチャするにはどうすればよいですか?
よろしくお願いします
WPFでのルーティングされたイベント処理の実装は、ネストされた階層内のすべてのコントロールに、タッチイベントとマウスイベントをインターセプトして処理する機会を与えることを目的としています。ただし、コントロールには、子がイベント通知を受信できないようにする機能があります。
ここにイベントルーティングのかなり良い説明があります:http://nui.joshland.org/2010/04/why-wont-wpf-controls-work-with-touch.html
すべてのコントロールはプレビューイベント(クリックまたはタッチ用)を受け取りますが、これを防ぐことはできません。この後、イベントは通常のマウス/タッチイベントに「プロモート」されます(タッチはクリック前に処理されます)。ただし、階層内の「クリック」(WPFでは_MouseDown)イベント処理のコントロールによって、イベントのHandledプロパティが設定されます。 argsをtrueにすると、イベントはそれ以上伝播されません。
タッチイベントや操作を処理している場合、またはコードでe.Handled = trueを明示的に設定している場合を除き、ネストされたスタック内のすべてのコントロールは_MouseDownイベントを受け取る必要があります。
以下のコメントに記載されているように、一部のコントロールは「Handled = true」を設定し、コンテナが対応する_TouchDownまたは_MouseDownイベントを受信できないようにします。ただし、それらはすべて最初にPreviewTouch/PreviewMouseDownを受け取ります。
また、タッチイベントを処理すると、マウスイベントの処理が妨げられることに注意してください。