Bei einem Klick auf eine TextBox soll der Text automatisch selektiert werden. Diese Anforderung klingt simpel, denn der erste Gedanke ist hierbei oft das Abonnieren des GotFocus-Events. Erhält die TextBox ihren Fokus, so kann die SelectAll-Methode den Text markieren. Das funktioniert allerdings nur sporadisch und nicht bei allen Szenarien, die auftreten können. Die Fokussierung kann durch einen Mausklick, Tastendruck, Stifteingabe oder Touch erfolgen. Wird direkt auf eines dieser Events reagiert, funktioniert die SelectAll-Methode zuverlässig. Bei einem weiteren Klick muss dann der Cursor genau an der gewünschten Stelle positioniert und die Selektion aufgehoben werden.
WPF: TextBox-Text automatisch selektieren
Soll die Funktion für alle TextBox-Steuerelemente erfolgen, ist ein allgemeiner Zugriff via App.xaml.cs-Datei ideal. Der Beispielcode dazu steht in Listing 1. Ebenfalls wäre das Schreiben eines Behaviors möglich, um nur bestimmte TextBox-Steuerelemente mit dieser Funktionalität zu erweitern.
Listing 1: „TextBox“-Steuerelemente bei Fokussierung automatisch selektieren
public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { EventManager.RegisterClassHandler(typeof(TextBox), UIElement.PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(SelectivelyIgnoreMouseButton)); EventManager.RegisterClassHandler(typeof(TextBox), UIElement.GotKeyboardFocusEvent, new RoutedEventHandler(SelectAllText)); EventManager.RegisterClassHandler(typeof(TextBox), Control.MouseDoubleClickEvent, new RoutedEventHandler(SelectAllText)); base.OnStartup(e); } void SelectivelyIgnoreMouseButton(object sender, MouseButtonEventArgs e) { DependencyObject parent = e.OriginalSource as UIElement; while (parent != null && !(parent is TextBox)) { parent = VisualTreeHelper.GetParent(parent); } if (parent != null) { var textBox = (TextBox)parent; if (!textBox.IsKeyboardFocusWithin) { textBox.Focus(); e.Handled = true; } } } void SelectAllText(object sender, RoutedEventArgs e) { var textBox = e.OriginalSource as TextBox; if (textBox != null) { textBox.SelectAll(); } } }
Aufmacherbild: Three businessmen are holding a check boxesvon Shutterstock.com / Urheberrecht: Ismagilov