Member 12837938 Ответов: 1

Как преобразовать нажатую клавишу в заглавную букву в WPF, rich text box?


Привет Я работаю над компьютерным приложением. Я хочу предоставить пользователю возможность выбрать верхний регистр из combobox, и когда он набирает текст, шрифт в rich text box преобразуется в верхний регистр. Окончательный типизированный документ будет состоять из нескольких строк в верхнем регистре и нескольких строк в нижнем регистре.

Я новичок в wpf, c#. В текстовом поле есть опция для оболочки символов, но не удалось получить решение для richtextbox wpf.

Что я уже пробовал:

I have tried with in textbox. There is charactercasing. But no such thing in wpf rich text box. 

[no name]

Таппер()

1 Ответов

Рейтинг:
9

Henrik Jonsson

Это непросто, но, зарегистрировав следующий обработчик событий TextChanged, я получил приведенный ниже код для преобразования каждого ввода в верхний регистр. Если вы добавите код для проверки Вашего выбора combobox, вы можете заставить его работать.

private void RichTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
    var textBox = (RichTextBox)sender;

    var docStart = textBox.Document.ContentStart.DocumentStart;
    foreach ( var change in e.Changes )
    {
        if( change.AddedLength > 0 )
        {
            var changeStart = docStart.GetPositionAtOffset(change.Offset, LogicalDirection.Forward);
            var changeEnd =   docStart.GetPositionAtOffset(change.Offset+change.AddedLength, LogicalDirection.Forward);
            var changedRange = new TextRange(changeStart, changeEnd);
            var currentText = changedRange.Text;
            var upperText = currentText.ToUpper();
            if( upperText != currentText )
            {
                changedRange.Text = upperText;
                Debug.Print("Replaced " + currentText);
            }
            textBox.Selection.Select(changeEnd, changeEnd);
        }
    }

}