WPF FAQ - RichTextBox

Find answers for the most frequently asked questions
Expand All Collapse All

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

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

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

Share with

Couldn't find the FAQs you're looking for?

Please submit your question and answer.