Changing inline in flowdocument

2019-07-15 09:15发布

问题:

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.

回答1:

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