Я применяю форматирование к выбранным маркерам в WPF RichTextBox. Для этого я получаю TextRange, который включает в себя токен, который я хотел бы выделить. Затем я изменить цвет текста, как это:WPF RichTextBox - форматирование введенного текста
// Get start and end pointer for token
TextPointer startPointer = run.ContentStart.GetPositionAtOffset(startOffset);
TextPointer endPointer = run.ContentStart.GetPositionAtOffset(endOffset);
// Get text range for token
TextRange textRange = new TextRange(startPointer, endPointer);
// Highlight token
textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Blue);
Это происходит на событие TextChanged моего RichTextBox.
Форматирование применяется, как и ожидалось, но продолжение текста приводит к тому, что новый текст наследует форматирование, которое уже было применено к соседнему слову. Я хотел бы, чтобы форматирование любого нового текста использовало параметры форматирования по умолчанию, определенные в свойствах RichTextBox. Это возможно?
В качестве альтернативы я мог бы выделить все маркеры, которые не хотят быть синими с вариантами форматирования по умолчанию, но для меня это неловко.
Спасибо за ваш ответ Benny. Да, это стандартное поведение, но я пытаюсь реализовать подсветку синтаксиса и, скорее всего, этого не сделал. В событии TextChanged я просто вызываю свою процедуру разбора, которая создает маркеры, которые имеют начальную и конечную позиции, которые я использую для создания TextRange (я добавил этот код в свой первоначальный вопрос). Использование пробелов как разделителя - это возможность, но я бы предпочел избежать этого, поскольку пробелы не гарантируются. Спасибо, Alan –
Ну, это не должно быть пробелом в качестве разделителя. Я предлагаю ** подождать **, чтобы применить стиль, пока курсор не будет на 'endOffset + 1', поэтому между курсором и текстовым диапазоном есть что-то. Так что даже после того, как тип 'SomeToken'' * * * заканчивается набирать «n», токен еще не выбран. Но, когда я набираю символ * next *, 'SomeToken {|', то токен найден и оформляется при вводе «{» (или любого другого символа). Я заметил, что подсветка синтаксиса работает в некоторых других программах. Извините, если я не понял. Надеюсь, что это яснее. –
Еще раз спасибо Бенни.Не волнуйся, ты был очень ясен. То, что я пытался избежать, это полный сброс форматирования при каждом анализе, но я все еще вижу ситуации, когда поведение RichTextBox, когда оно наследует смежное форматирование, которое вызовет у меня проблемы, если я не полностью сброшу форматирование. Я уверен, что будет счастливая среда. Thanks, Alan –