WPF touchでWindowsを開くとその後のtouchイベントを拾わなくて困る

touchupイベントとClickイベントの違い

https://social.msdn.microsoft.com/Forums/netframework/ja-JP/1d2d61bc-4d38-44f6-84ad-ea2c726567b1?forum=wpfja

各種入力デバイスに応じたクリック動作が行われたときに発生
キーボード スペースまたはエンターキー

入力デバイス依存のイベント
画面のタッチにのみ反応する

Click系イベントは、デバイスによらず応答する。逆に特有動作はできない。例えば、isManupilationを有効にしてタッチ操作上でオブジェクトを動かすとか。

https://stackoverflow.com/questions/15459384/wpf-touchup-not-firing-when-parent-manipulation-is-enabled

イベントの違いは分かりましたが、なぜかTouchイベントでWindowをShowDialogすると、その開いたWindowを画面タッチした時にClickイベントが発生しなくなります。

次の画面でClickイベントしか書いていないと、タッチしても反応しません。しつこく何度もタッチするとClickイベントが発生します。

TouchUpイベントの中で次の画面を開くときに、Showすると

この動作は、おそらくShowDialogするとTouchイベントが終わる前に動作してしまう事が関係しているのではないかと思う。Showだと、そのまま裏で処理は進むので。

で、
.IsManipulationEnabled = false;
を入れてManipulationが終わったことにならんかとか、

e.Handled = true

として、イベント処理済にならんかと試してみましたが、動作は変わりませんでした。しょうがないので、f.Showのままでいかないといけない。

問題 子ウィンドウが親ウィンドウの後ろに

今のところ、問題としては時々ウィンドウが後ろに回ってしまう事があるのです。

仕方ないので、f.Show動作は変えずウィンドウの後ろに回り込まないように

モードレスのフォームが、あるフォームの背後に隠れないようにする

してみました。WPFだとFormアプリと書き方が違うみたいで、こんな感じで設定します。

どちらにしろ稀にしか症状が出なかったのでこれで様子見になります。

参考

https://msdn.microsoft.com/ja-jp/library/system.windows.window.owner(v=vs.110).aspx

 

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です