Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set specific text to bold in WPF RichTextBox

I am extending the functionality of a WPF Richtextbox. I want certain text to become bold when I type it in. I was able to get certain text to bold but the text following the bolded word would also become bolded...

Heres a sample of my code:

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;
}

I want:

NOTBOLDED NOTBOLDED BOLDED NOTBOLDED

but what I get:

NOTBOLDED NOTBOLDED BOLDED NOTBOLDED

**Please note that it becomes bolded while typing.

How do I prevent the text after a bolded word from also becoming bolded?


Not duplicate question since the accepted solution for provided link is for WinForms and the rest are for preset text.

like image 649
SILENT Avatar asked Nov 06 '15 04:11

SILENT


2 Answers

After several tests, I figured out a simple solution.

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

This set caret in the right orientation, preventing the BOLD setting from continuing within the Run object.

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

This would add a Run object to the end of a new Bold object that was located at the end of the Paragraph object.

like image 186
SILENT Avatar answered Sep 30 '22 04:09

SILENT


You will need to detect when your required text is no longer detected, probably if a space occurs, then remove the bolding value and reset it back to normal.

like image 45
Steve Avatar answered Sep 30 '22 02:09

Steve