Сбросить форматирование вместо существующего объекта FlowDocument/Paragraph

Я искал в Интернете повсюду, поэтому любая помощь, которую может оказать сообщество, очень ценится.

Есть ли способ изменить и даже сбросить все форматирование (выделение жирным шрифтом, цвета и т. д.) в объекте Paragraph внутри RichTextBox из кода позади? У меня есть RichTextBox, в котором я применяю синтаксис и подсветку ошибок к строкам (каждая строка представлена ​​Paragraph), и я хочу иметь возможность вернуть или изменить форматирование на месте, чтобы TextPointers для выделенного текста можно было легко выбрать повторно. Например, я хочу иметь возможность выполнять сопоставление скобок так же, как это делает Visual Studio, без того, чтобы пользователь не отображал курсор в начале или конце строки.

Я думаю об этом неправильно?

Этот ответ почти привел меня туда.

Заранее спасибо!


person Roger    schedule 27.12.2011    source источник


Ответы (1)


Главное, что нужно знать, это то, что конструктор TextRange принимает два объекта TextPointer в качестве начала и конца. Эти объекты не должны быть каким-либо образом привязаны к выделению, и у них есть такие методы, как GetPositionAtOffset, для перемещения по содержимому.

Вот пример кода для сброса семейства шрифтов, полужирного и курсива в абзаце, где находится курсор пользователя, без изменения выделения вообще:

var para = richTextBox.CaretPosition.Paragraph;
var range = new TextRange(para.ContentStart, para.ContentEnd);
range.ApplyPropertyValue(TextElement.FontFamilyProperty, "Calibri");
range.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Normal);
range.ApplyPropertyValue(TextElement.FontStyleProperty, FontStyles.Normal);
person Dan Fitch    schedule 07.03.2012