touchupイベントとClickイベントの違い
[browser-shot url=”https://social.msdn.microsoft.com/Forums/netframework/ja-JP/1d2d61bc-4d38-44f6-84ad-ea2c726567b1?forum=wpfja” width=”600″ height=”450″ target=”_blank”]
Clickイベントは”高レベル”なクリックイベント
各種入力デバイスに応じたクリック動作が行われたときに発生
キーボード スペースまたはエンターキー
Touch系イベントは”低レベル”なイベント
入力デバイス依存のイベント
画面のタッチにのみ反応する
Click系イベントは、デバイスによらず応答する。逆に特有動作はできない。例えば、isManupilationを有効にしてタッチ操作上でオブジェクトを動かすとか。
[browser-shot url=”https://stackoverflow.com/questions/15459384/wpf-touchup-not-firing-when-parent-manipulation-is-enabled” width=”600″ height=”450″ target=”_blank”]
イベントの違いは分かりましたが、なぜかTouchイベントでWindowをShowDialogすると、その開いたWindowを画面タッチした時にClickイベントが発生しなくなります。
X_Window f = new X_Window(); f.ShowDialog();
次の画面でClickイベントしか書いていないと、タッチしても反応しません。しつこく何度もタッチするとClickイベントが発生します。
TouchUpイベントの中で次の画面を開くときに、Showすると
X_Window f = new X_Window(); f.Show();
この動作は、おそらくShowDialogするとTouchイベントが終わる前に動作してしまう事が関係しているのではないかと思う。Showだと、そのまま裏で処理は進むので。
で、
.IsManipulationEnabled = false;
を入れてManipulationが終わったことにならんかとか、
e.Handled = true
として、イベント処理済にならんかと試してみましたが、動作は変わりませんでした。しょうがないので、f.Showのままでいかないといけない。
問題 子ウィンドウが親ウィンドウの後ろに
今のところ、問題としては時々ウィンドウが後ろに回ってしまう事があるのです。
仕方ないので、f.Show動作は変えずウィンドウの後ろに回り込まないように
モードレスのフォームが、あるフォームの背後に隠れないようにする
してみました。WPFだとFormアプリと書き方が違うみたいで、こんな感じで設定します。
X_Window f = new X_Window(); f.Owner = this; f.Show();
どちらにしろ稀にしか症状が出なかったのでこれで様子見になります。
参考
[browser-shot url=”https://msdn.microsoft.com/ja-jp/library/system.windows.window.owner(v=vs.110).aspx” width=”600″ height=”450″ target=”_blank”]