Установить определенный текст для полужирного в WPF RichTextBox

Я расширяю функциональность WPF Richtextbox. Я хочу, чтобы определенный текст стал жирным, когда я его набираю. Мне удалось получить определенный текст жирным шрифтом, но текст, следующий за жирным шрифтом, также станет жирным...

Вот пример моего кода:

private bool _Running = false;
void CustomRichTextBox_TextChange(object sender, TextChangedEventArgs e)
{
    if(_Running)
        return;
    _Running = true;

    //Logic to see if text detected

    //Logic to get TextPointers

    //Logic to get TextRange
    var boldMe = new TextRange(textPointer1, textPointer2);
    //Bold text
    boldMe.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold);

    _Running = false;
}

Я хочу:

НЕГОЛОВЫЙ НЕГОЛОВЫЙ ПОЛНЫЙ НЕГОЛОВЫЙ

но что я получаю:

НЕГОЛОВЫЙ НЕГОЛОВЫЙ ПОЛНЫЙ НЕГОЛОВЫЙ

** Пожалуйста, обратите внимание, что это становится жирным шрифтом при наборе текста.

Как не допустить, чтобы текст после жирного слова также стал жирным?


Не повторяющийся вопрос, поскольку принятое решение для предоставленной ссылки предназначено для WinForms, а остальное - для заданного текста.

2 ответа

Решение

После нескольких тестов я нашел простое решение.

CaretPosition = CaretPosition.GetPositionAtOffset(0, LogicalDirection.Forward);

Это устанавливает каретку в правильной ориентации, предотвращая продолжение настройки BOLD внутри объекта Run.

if(textPointerEnd.GetNextInsertionPosition(LogicalDirection.Forward) == null)
    new Run("", textPointerEnd);

Это добавит объект Run в конец нового объекта Bold, который был расположен в конце объекта Paragraph.

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

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