Изменить ключ в WPF KeyDown

Устаревшая проблема конвертации приложения. VB6 TextBox_KeyDown() позволяет изменять клавишу (например, принудительно нажимать клавишу в верхнем регистре, но есть много других применений). Как это можно сделать в WPF?

Единственный способ, которым я могу видеть, - это обрабатывать все нажатия клавиш TextBox. По сути, переопределить редактирование TextBox. Я бы лучше не пошел туда.

1 ответ

Очень быстрое и грязное решение. Предполагая, что вы хотите привязать значение TextBox.Text к чему-либо, вы можете написать конвертер, который просто вызывает ToUpper() в строке.

В приведенном ниже примере текстовое поле привязано к себе. Скорее всего, это НЕ то, что вы хотите в производстве, но это может вдохновить.

<local:UpperConverter x:Key="toUpperConverter" />

...

<TextBox Text="{Binding RelativeSource={RelativeSource Mode=Self},
                                Path=Text, Mode=OneWay, Converter={StaticResource toUpperConverter},
                                UpdateSourceTrigger=PropertyChanged}" />

...

class UpperConverter:IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value.ToString().ToUpper();
        }

Вы можете установить CharacterCasing на Upper.

<TextBox CharacterCasing="Upper"></TextBox>

Решение MSDN

Другие вопросы по тегам