私はWPFアプリケーションに取り組んでいます。このアプリケーションでは、金額を表示するテキストボックスがいくつかあります。テキストボックスにフォーカスが来るたびに、テキストボックス内のすべてのコンテンツを選択したいだけです。
同じことを実現するために、「GotFocus」イベントのテキストボックスのSelectAll()メソッドを使用していますが、希望どおりに機能しません。
どうすれば機能することができるか教えてください。ありがとう
私はWPFアプリケーションに取り組んでいます。このアプリケーションでは、金額を表示するテキストボックスがいくつかあります。テキストボックスにフォーカスが来るたびに、テキストボックス内のすべてのコンテンツを選択したいだけです。
同じことを実現するために、「GotFocus」イベントのテキストボックスのSelectAll()メソッドを使用していますが、希望どおりに機能しません。
どうすれば機能することができるか教えてください。ありがとう
FocusableChangedイベントの処理を試しましたか http://msdn.microsoft.com/en-us/library/system.windows.uielement.focusablechanged.aspx
FocusableChangedイベントハンドラー内でIsFocusedを確認できます。IsFocusedがtrueの場合、SelectAllを呼び出すことができます。以下は擬似コードです。
textBox.FocusableChanged += (s,e) =>
{
if(textBox.IsFocused)
testBox.SelectAll();
}
EDIT1
上記が機能していないため、FocusManger.GetFocusedElementを試すことができます。
焦点を絞った要素を決定する
public DebugFocusedElementProxy()
{
var timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(100);
timer.Tick += (o, ea) =>
{
var fe = FocusManager.GetFocusedElement();
if (fe != null)
{
var element = fe as FrameworkElement;
if (!string.IsNullOrEmpty(element.Name) &&
String.Equals(element.Name, textBox))
{
textBox.SelectAll();
}
}
};
timer.Start();
}
//textBox.SelectAllをディスパッチャスレッドで呼び出す必要がある場合があることに注意してください
このための添付の動作を作成し、目的のテキストボックスに使用できます。このアプローチはここで詳細に説明されています-
http://eladm.wordpress.com/2009/04/02/attached-behavior/
このような動作のコードは、こことここでも入手できます。
アプリケーション内のすべてのテキストボックスにデフォルトでこれを持たせたい場合は、ここを見てください-
起動時に、テキストボックスのグローバルイベントハンドラーを登録します。
EventManager.RegisterClassHandler(typeof(System.Windows.Controls.Primitives.TextBoxBase), UIElement.GotFocusEvent, new RoutedEventHandler(TextBoxBaseGotFocus));
TextBoxBaseGotFocusメソッドは次のようになります。
private static void TextBoxBaseGotFocus(object sender, RoutedEventArgs e)
{
// Get the TextBoxBase
var elem = sender as System.Windows.Controls.Primitives.TextBoxBase;
if (elem != null)
{
elem.SelectAll();
}
}