2016-08-30 4 views
1

Я использую C# WPF с Avalon Edit Text Box.WPF Avalon Редактировать Сделать текст в верхнем регистре

Я пытаюсь сделать весь текст в текстовом поле в верхнем регистре, и я получаю сообщение об ошибке с дополнительным сообщением: «В данный момент группа отмены не должна открываться».

Я использую следующий код:

a.Text = a.Text.ToUpper(); 

, где "а" является AvalonEdit.TextEditor

Спасибо.

ответ

1

Свойство TextEditor.Text имеет побочный эффект очистки стека отмены (как и в случае с обычным WPF TextBox). Очистка стека отмены возможна только в том случае, если нет открытой группы отмены.

Если вы не намеревались очистить стопку отмены, используйте вместо этого методы на textEditor.Document, чтобы изменить документ. Вы захотите избежать замены всего текста, потому что это также сбросит позицию выбора и каретки (в конце концов, AvalonEdit не может знать, как ваш новый текст связан со старым текстом).

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

Если все, что вы хотите сделать, это прописной текст, как это подводится, то лучше изменить текст, прежде чем он будет добавлен к документу: обрабатывать TextArea.TextEntering событие, чтобы отменить любой вход строчной (комплект e.Handled = true;) и вместо этого вызовите TextArea.PerformTextInput(), чтобы повторить процесс ввода текста с соответствующим текстом верхнего регистра.

Для копирования-вставки вы можете обрабатывать прилагаемые DataObject.PastingEvent и изменять данные для вставки.