WPF Avalon Edit Сделать текст заглавными

Я использую C# WPF с Avalon Edit Text Box.

Я пытаюсь сделать весь текст в верхнем регистре текстового поля, и я получаю сообщение об ошибке с дополнительным сообщением "На этом этапе группа отмены не должна быть открыта".

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

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

где "a" - это AvalonEdit.TextEditor

Спасибо.

1 ответ

Решение

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

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

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

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

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

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