WPF FAQ - RichTextBox

How to get the RichTextBox’s unformatted text?

You can get the unformatted text in the RichTextBox using this approach

RichTextBox rtb = richTextBox as RichTextBox;
            
TextRange tr = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
Permalink
How do I support drag-and-drop for a RichTextBox?

You must set the ‘AllowDrop’ property on the RichTextBox control to true and also handle both the ‘DragEnter’ and ‘DragDrop’ events.

Add event handlers to the control as given below.

[C#]

using System.Windows.Forms;
richTextBox1.DragEnter += new DragEventHandler( richTextBox1_DragEnter );
richTextBox1.DragDrop += new DragEventHandler( richTextBox1_DragDrop );

Write event handlers :
{
        private void richTextBox1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = e.Data.GetDataPresent(DataFormats.Text)
              ? DragDropEffects.Copy
              : DragDropEffects.None;
        }

        private void richTextBox1_DragDrop(object sender, DragEventArgs e)
        {
            // Load the file into the control
            string text = (string)e.Data.GetData('Text');
            richTextBox1.LoadFile(text, RichTextBoxStreamType.RichText);
        }

        public Window1()
        {
            InitializeComponent();
        }
    }
Permalink
How can I Save, Load, and Print RichTextBox Content ?

This can be done using the XAML code as given below.

[XAML]

<Page xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
  xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
  x:Class='SDKSample.SaveLoadPrintRTB' >

  <StackPanel>
    <RichTextBox Name='richTB'>
      <FlowDocument>
        <Paragraph>
          <Run>Paragraph 1</Run>
        </Paragraph>
      </FlowDocument>
    </RichTextBox>

    <Button Click='SaveRTBContent'>Save RTB Content</Button>
    <Button Click='LoadRTBContent'>Load RTB Content</Button>
    <Button Click='PrintRTBContent'>Print RTB Content</Button>
  </StackPanel>
</Page>

Below is the code-behind for the example.

[C#]

// Handle 'Save RichTextBox Content' button click.
        void SaveRTBContent(Object sender, RoutedEventArgs args)
        {

            // Send an arbitrary URL and file name string specifying
            // the location to save the XAML in.
            SaveXamlPackage('C:\\test.xaml');
        }

        // Handle 'Load RichTextBox Content' button click.
        void LoadRTBContent(Object sender, RoutedEventArgs args)
        {
            // Send URL string specifying what file to retrieve XAML
            // from to load into the RichTextBox.
            LoadXamlPackage('C:\\test.xaml');
        }

        // Handle 'Print RichTextBox Content' button click.
        void PrintRTBContent(Object sender, RoutedEventArgs args)
        {
            PrintCommand();
        }

        // Save XAML in RichTextBox to a file specified by _fileName
        void SaveXamlPackage(string _fileName)
        {
            TextRange range;
            FileStream fStream;
            range = new TextRange(richTB.Document.ContentStart, richTB.Document.ContentEnd);
            fStream = new FileStream(_fileName, FileMode.Create);
            range.Save(fStream, DataFormats.XamlPackage);
            fStream.Close();
        }

        // Load XAML into RichTextBox from a file specified by _fileName
        void LoadXamlPackage(string _fileName)
        {
            TextRange range;
            FileStream fStream;
            if (File.Exists(_fileName))
            {
                range = new TextRange(richTB.Document.ContentStart, richTB.Document.ContentEnd);
                fStream = new FileStream(_fileName, FileMode.OpenOrCreate);
                range.Load(fStream, DataFormats.XamlPackage);
                fStream.Close();
            }
        }

        // Print RichTextBox content
        private void PrintCommand()
        {
            PrintDialog pd = new PrintDialog();
            if ((pd.ShowDialog() == true))
            {
                //use either one of the below      
                pd.PrintVisual(richTB as Visual, 'printing as visual');
                pd.PrintDocument((((IDocumentPaginatorSource)richTB.Document).DocumentPaginator), 'printing as paginator');
            }
      }
Permalink
How do I create and save a RichTextFormat (RTF) file?

One way to do this is to use the ‘RichTextBox.SaveFile()’ method.

[C#]

private void button1_Click( object sender, EventArgs e )
{
  // get a file name from the user
 SaveFileDialog saveFile1 = new SaveFileDialog();
  saveFile1.DefaultExt = '*.rtf';
  saveFile1.Filter = 'RTF Files|*.rtf';
  if ( saveFile1.ShowDialog() == DialogResult.OK )
    richTextBox1.SaveFile( saveFile1.FileName, RichTextBoxStreamType.RichText )
}
Permalink