Search code examples
c#wpfrichtextboxflowdocument

Changing inline in flowdocument


I have a flowdocument like this:

var mcFlowDoc = new FlowDocument();
var para = new Paragraph();
para.Inlines.Add(new Run("This is the first line."));
para.Inlines.Add(new Run("This is the second line."));
para.Inlines.Add(new Run("This is the third line."));
mcFlowDoc.Blocks.Add(para);
richTextBox.Document = mcFlowDoc;

I need to change the background of one of the lines by clicking on any part of that text.

First of all I am trying to change the background of a given inline (regardless of mouse click), but I am unable to do it.

Any help would be appreciated.

Edit: I could change the background color of a run, but then I had to add all runs again and redraw. I need it to work faster, so I'm just trying to change a run without adding all again.


Solution

  • You could add a Style for Run to subscribe e.g. MouseLeftButtonDown

    <RichTextBox.Resources>
        <Style TargetType="Run">
            <EventSetter Event="MouseLeftButtonDown" Handler="Run_Click" />
        </Style>
    </RichTextBox.Resources>
    

    and handle the event like this

    void Run_Click(object sender, MouseButtonEventArgs e)
    {
        Run run = sender as Run;
        run.Background = Brushes.Red;
    }