A simple TrimmedTextBox for WPF
So I wanted a TextBox that trims automatically. At first I played with the idea of a converter, but that just didn’t work out. Try using a trim converter with UpdateSourceTrigger=PropertyChanged and you will see what I mean. Yes, it seems you cannot even type a space. I need the trimming to occur after losing focus.
After thinking about it, a converter was the wrong method anyway. If I want a TextBox that always trims when it loses focus, why not just make one by inheriting from TextBox and adding a method to the LostFocus event. So I did.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | using System.Windows.Controls; namespace WpfSharp.UserControls { public class TrimmedTextBox : TextBox { public TrimmedTextBox() { LostFocus += TrimOnLostFocus; } void TrimOnLostFocus( object sender, System.Windows.RoutedEventArgs e) { var trimTextBox = sender as TrimmedTextBox; if (trimTextBox != null ) trimTextBox.Text = trimTextBox.Text.Trim(); } } } |
Now to use this in XAML, add this namespace to your UserControl or Window:
1 | xmlns:wpfsharp="clr-namespace:WpfSharp.UserControls;assembly=WpfSharp" |
Then use the object like this:
1 | < wpfsharp:TrimmedTextBox Name = "TextBoxAccount" TextWrapping = "Wrap" MinWidth = "200" Text = "{Binding Account}" /> |
Remember, it is the simple solutions that are best.