For once I´ll ramble less and provide more 🙂
A simple class to help you make the WPF TextBox able to select the text when it gets focus. I´ve gotten tired of subclassing all the time so this is a neat little class that you can just attach to any TextBox-control.
The class looks like this:
public static class TextExt { public static readonly DependencyProperty SelectAllProperty = DependencyProperty.RegisterAttached ("SelectAll", typeof (bool), typeof (TextExt), new PropertyMetadata (default (bool), OnSelectAllChanged)); /// <summary>Handle when the <see cref="SelectAllProperty"/> changes for an element</summary> private static void OnSelectAllChanged (DependencyObject d, DependencyPropertyChangedEventArgs e) { // Make sure the object is a TextBox var textBox = d as TextBox; if (textBox == null) throw new InvalidOperationException ( "SelectAll property can only be assigned to elements of type TextBox"); // Unassign previous events textBox.GotKeyboardFocus -= GotKeyboardFocus; textBox.GotMouseCapture -= GotMouseFocus; // If property is set to true, reassign events again if (!((bool) e.NewValue)) return; textBox.GotKeyboardFocus += GotKeyboardFocus; textBox.GotMouseCapture += GotMouseFocus; } private static void SelectAll (object sender) { ((TextBox) sender).SelectAll (); } private static void GotKeyboardFocus (object sender, KeyboardFocusChangedEventArgs e) { SelectAll (sender); } private static void GotMouseFocus (object sender, MouseEventArgs mouseEventArgs) { SelectAll (sender); } public static void SetSelectAll (TextBox element, bool value) { element.SetValue (SelectAllProperty, value); } public static bool GetSelectAll (TextBox element) { return (bool) element.GetValue (SelectAllProperty); } }
And you use it like this:
<TextBox Text="{Binding Weight}" XamlExtensions:TextExt.SelectAll="True" />
Seems to be working pretty well and with a small amount of code.