Форматирование абзаца в WPF RichTextBox?

Мне нужно применить форматирование абзаца к выделенному в текстовом поле. Мой RTB будет вести себя так же, как и богатые текстовые поля на StackOverflow - пользователь может вводить текст в RTB, но они также могут вводить блоки кода. RTB будет применять очень простое форматирование для кодового блока - он изменит шрифт и применит фоновый цвет для всего блока, аналогично тому, что вы видите в блоке кода ниже.

Изменение шрифта довольно просто:

var textRange = new TextRange(rtb.Selection.Start, rtb.Selection.End);
textRange.ApplyPropertyValue(TextElement.FontFamilyProperty, "Consolas");
textRange.ApplyPropertyValue(TextElement.FontSizeProperty, 10D );

Теперь мне нужно применить некоторое форматирование на уровне абзаца. Мне нужно установить границу абзаца равным 0, поэтому я не получаю пустую строку между строками кода, и мне нужно установить цвет фона абзаца. Здесь моя проблема: я не могу понять, как получить элементы абзаца от выбора, чтобы я мог применять форматирование.

Любые предложения? Пример использования свойств Margin и Background будет невероятно полезен. Спасибо!

1 ответ

О, это было легко. Перешел через ответ с небольшим количеством исследований:

var textRange = new TextRange(TextBox.Selection.Start, TextBox.Selection.End);
textRange.ApplyPropertyValue(TextElement.FontFamilyProperty, "Consolas");
textRange.ApplyPropertyValue(TextElement.FontSizeProperty, 10D );
textRange.ApplyPropertyValue(Paragraph.MarginProperty, new Thickness(0));
textRange.ApplyPropertyValue(Paragraph.BackgroundProperty, "LightSteelBlue");

Единственное ограничение заключается в том, что выделение по-прежнему распространяется только на текст, а не на правую часть элемента управления. Я оставлю этот вопрос открытым на пару дней; если кто-то скажет мне, как расширить фон до правого края элемента управления, я приму свой ответ на этот вопрос.

licensed under cc by-sa 3.0 with attribution.