Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Append New Paragraph To RichTextBox

I need to programmatically add a new paragraph to a RichTextBox control (just like pressing Enter). Using the code below, it does add a new paragraph but:

  • It deletes all the existing text in the control
  • The insertion point remains in the first line and doesn't move to the second newly created line
  • It only seems to add a new paragraph once, i.e. if I run the code a second time, a third paragraph isn't created

            FlowDocument flowDoc= rtbTextContainer.Document;
            Paragraph pr = new Paragraph();                
            flowDoc.Blocks.Add(pr);
            rtbTextContainer.Document = flowDoc;
    

I was testing a few things - I commented out the second and third lines of code, so I was only reading the Document and immediately set it back to the RichTextBox again, but that also deleted all existing text, so the issue might have something to do with that, but I can't figure it out.

How can I overcome these issues and programmatically append a new paragraph, and then set its focus.

Thanks

like image 368
John Steed Avatar asked Dec 20 '22 06:12

John Steed


1 Answers

Part of the view:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <RichTextBox x:Name="RichTextBox1"/>
    <Button Grid.Row="1" Content="click-me" Click="Button_Click"/>
</Grid>

And the code behind:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var paragraph = new Paragraph();
    paragraph.Inlines.Add(new Run(string.Format("Paragraph Sample {0}", Environment.TickCount)));
    RichTextBox1.Document.Blocks.Add(paragraph);

    RichTextBox1.Focus();
    RichTextBox1.ScrollToEnd();
}

I hope it helps.

like image 186
dbvega Avatar answered Jan 01 '23 10:01

dbvega