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.