Как автоматически ограничить текстовое поле - PullRequest
2 голосов
/ 12 ноября 2010

Как мне сделать так, чтобы, когда пользователь печатал буквы в текстовом поле в серебряном свете, он менял эти буквы на все прописные? И в то же время по-прежнему запускаются все те же события, такие как нажатие клавиш.

Ответы [ 3 ]

1 голос
/ 12 ноября 2010

Если вы хотите избежать кода или пользовательских элементов управления (предпочтительно), этот вид функциональности доступен через поведение.

например. этот в галерее наложения Expression преобразует любое текстовое поле, к которому он прикреплен, в верхний регистр.

Тогда это просто вопрос перетаскивания в Blend или добавления триггера вручную в VS2010.

1 голос
/ 15 ноября 2010

Не было простого способа сделать это, кроме использования встроенного шрифта all caps Все остальные способы мешали работе текстового поля.

0 голосов
/ 12 ноября 2010

Самый простой способ будет:

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 или чем-то еще в сущности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...