Самый простой способ будет:
private void tb_TextChanged(object sender, TextChangedEventArgs e)
{
var tb = (TextBox)sender;
var caret = tb.CaretIndex;
tb.Text = tb.Text.ToUpper();
tb.CaretIndex = caret;
}
Если вы хотите сохранить еще большую производительность, вместо этого обработайте событие LostFocus (о котором вам также не нужно беспокоиться о положении каретки):
private void tb_LostFocus(object sender, RoutedEventArgs e)
{
var tb = (TextBox)sender;
tb.Text = tb.Text.ToUpper();
}
Но если данные связаны с моделью / сущностью, я бы назвал ToUpper()
в установщике свойств связанного объекта / OnPropertyChanged
, OnTextChanged
или чем-то еще в сущности.