2011-12-20 7 views
1

フォームにテキストボックスがあり、フォーカスの受け取り方法によってフォーカスを受け取ったときに別のアクションを実行する必要があります。WPFでどのようにフォーカスを受け取ったかを判断する方法

ユーザーがテキストボックスをクリックすると、ボックス内のテキスト文字列の最後にカーソルが置かれる標準的な方法が必要になります。ユーザーがテキストボックスにタブする場合、テキストボックス内に含まれるすべてのテキストを選択する必要があります。

これを行うにはエレガントな方法がありますか?

答えて

1

アプリケーションレベル(または親レベル)のトンネリングイベントを設定して、マウスがクリックされたかキーボードが押されたことを示すフラグ(PreviewMouseDownおよびPreviewKeyDown)を切り替えることができます。そのフラグをチェックして以前に押された内容に応じて、テキストボックスにフォーカスが移ったときに適切なアクションを実行できます。

+0

実際、PreviewMouseDownはテキストボックス自体を確認する方が良いです。しかし、残りは正しいです。いい答えだ! –

+0

GotFocusやPreviewGotKeyboardFocusを扱う際に、どのようにフォーカスが当てられたかを判断することができるエレガントなソリューションを知りたいと思っていました。私は時間の90%を動作するTabキーのKeyStateをチェックしようとしましたが、フォーカスイベントが処理された時点でTabキーがまだ押されているかどうかのタイミングです。私はまた、Tabを自分自身で処理するためにKeyDownを傍受しました。ここでは、トラバーサル要求を送信し、次の要素に、間違った項目を選択したままのテストを選択するように指示します。 – WPFNewbie

+0

@WPFNewbie:キーイベントがタブキーから来たかどうかは、必ずしも_a_キーであることを確認する必要はありません。これらのイベントは(ほとんどの場合、)相互に排他的なものなので、キーボードからのキー入力はすべてマウスからのものです。アプリケーションでフォーカスを変更する代替メソッドを設定しない限り、マウスクリックがキーイベントを引き起こす方法はありませんし、その逆もありません。 –

関連する問題