2013-03-17 21 views
5

子コントロールが1つあるCanvasがあります。子コントロールは、すべてのPreviewTouchDownイベントとPreviewTouchUpイベントを受け取りますが、Canvasで操作(IsManipulationEnabled = true)を有効にした後は、子オブジェクトに対して「down」イベントのみが発生しますが、TouchUpイベントとPreviewTouchUpイベントはまったく発生しません。親操作が有効なときにWPF TouchUpが起動しない

ここで何が起こっているのですか?

答えて

3

子要素のIsManipulationEnabledtrueも設定する必要があります。タッチ操作とイベントとの関係がInput Overview/Touch and Manipulationに説明されて


、セクションタッチして操作イベントの関係は:

AのUIElementは常にタッチイベントを受け取ることができます。 ManipulationEnabledプロパティがtrueに設定されている場合、UIElementはタッチイベントと操作イベントの両方を受け取ることができます( )。 TouchDownイベントが でない場合(つまり、Handledプロパティがfalseの場合)、操作 ロジックが要素へのタッチを取得し、操作 イベントを生成します。 TouchDownイベントでHandledプロパティがtrueに設定されている場合、 操作ロジックは操作イベントを生成しません。次の図の は、タッチイベントと 操作イベントの関係を示しています。

タッチして操作イベント

Touch and manipulation events

+0

これらを取得するオプションはありません。 – Jaska

+0

ちょうど 'Handled = true'をセットしている' PreviewTouchDown'ハンドラから手動で 'CaptureTouch'を呼び出す私自身のコードがいくつか見つかりました。また、 'PreviewTouchUp'ハンドラもあります。残念ながら今はテストできませんが、明日に試してみましょう。 – Clemens

+0

OK、あなたがそれを行うことができれば大丈夫ですが、あまりにも面倒であれば気にしないでください。私はすでに操作を使用するというアイデアを全部捨てて、touchmove -eventでスケールと回転を自分で計算することに決めました。 – Jaska

2

私がその歳の知っているが、これは誰かに役立つかもしれない:この問題を回避するために 、あなたは親があればうまく「スタイラスタップ」イベントをキャプチャすることができます要素にはIsManipulationEnabled = trueがあります

.... 

MyChildElement.StylusSystemGesture += MyChildElement_StylusSystemGesture; 

.... 

void MyChildElement_StylusSystemGesture(object sender, StylusSystemGestureEventArgs e) 
    { 
     if (e.SystemGesture == SystemGesture.Tap) 
      //Do something 
    } 
+0

それから1年後、あなたは私の正気を救った!最後に、操作が有効になっている要素の「クリック」を検出できます。囲みボタンはクリックを検出しませんが、スタイラスジェスチャーは機能します。 – ulatekh

関連する問題