いくつかのテキスト ボックスを含む WPF フォームがあるとします。テキスト ボックスにタブで移動し、既に何かが含まれている場合、そのボックス内のすべてのテキストを選択して、入力するとそのテキストが消去されるようにします。ボックスをマウスでクリックすると、おそらくどこかの文字を変更したいことを意味するので、この場合はすべてを強調表示しないでください。十分に簡単に思えますが、これまでのところ良い解決策は私にはわかりませんでした。これは私がこれまでに持っていたもので、動作に非常に近いですが、完全ではありません。
<Style x:Key="TextBoxStyle" TargetType="TextBox">
<EventSetter Event="GotKeyboardFocus" Handler="EventSetter_OnHandler" />
</Style>
private void EventSetter_OnHandler(object sender, RoutedEventArgs e)
{
TextBox txt = sender as TextBox;
if (txt != null) txt.SelectAll();
}
そのため、ボックスがキーボード フォーカスを取得すると、すべてが選択されるため、テキスト ボックスにタブで移動すると、すべてのテキストが完全に選択されます。ただし、マウスをクリックすると、このメソッドも呼び出され、テキストも強調表示されますが、クリックすると、マウスがクリックされた場所にカーソルが置かれます。機能的には完璧ですが、マウスをクリックしたときにすべてを選択するとちらつくのが気になります。これを行うためのより良い方法、またはイベントに何らかのチェックを入れて、タブではなくマウスクリックからキーボードフォーカスを取得したことを確認しますか?