How to: Save, Load, and Print RichTextBox Content

The following example shows how to save content of a RichTextBox to a file, load that content back into the RichTextBox, and print the contents.

Example

Below is the markup for the example.

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

Example

Below is the code behind for the example.

using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;

namespace SDKSample
{

    public partial class SaveLoadPrintRTB : Page
	{

        // 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");
            }
        }
    }
}

Imports System
Imports System.IO
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents
Imports System.Windows.Media

Namespace SDKSample

	Partial Public Class SaveLoadPrintRTB
		Inherits Page

		' Handle "Save RichTextBox Content" button click.
		Private Sub SaveRTBContent(ByVal sender As Object, ByVal args As RoutedEventArgs)

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

		' Handle "Load RichTextBox Content" button click.
		Private Sub LoadRTBContent(ByVal sender As Object, ByVal args As RoutedEventArgs)
			' Send URL string specifying what file to retrieve XAML
			' from to load into the RichTextBox.
			LoadXamlPackage("C:\test.xaml")
		End Sub

		' Handle "Print RichTextBox Content" button click.
		Private Sub PrintRTBContent(ByVal sender As Object, ByVal args As RoutedEventArgs)
			PrintCommand()
		End Sub

		' Save XAML in RichTextBox to a file specified by _fileName
		Private Sub SaveXamlPackage(ByVal _fileName As String)
			Dim range As TextRange
			Dim fStream As FileStream
			range = New TextRange(richTB.Document.ContentStart, richTB.Document.ContentEnd)
			fStream = New FileStream(_fileName, FileMode.Create)
			range.Save(fStream, DataFormats.XamlPackage)
			fStream.Close()
		End Sub

		' Load XAML into RichTextBox from a file specified by _fileName
		Private Sub LoadXamlPackage(ByVal _fileName As String)
			Dim range As TextRange
			Dim fStream As FileStream
			If File.Exists(_fileName) Then
				range = New TextRange(richTB.Document.ContentStart, richTB.Document.ContentEnd)
				fStream = New FileStream(_fileName, FileMode.OpenOrCreate)
				range.Load(fStream, DataFormats.XamlPackage)
				fStream.Close()
			End If
		End Sub

		' Print RichTextBox content
		Private Sub PrintCommand()
			Dim pd As New PrintDialog()
			If (pd.ShowDialog() = True) Then
				'use either one of the below      
				pd.PrintVisual(TryCast(richTB, Visual), "printing as visual")
				pd.PrintDocument(((CType(richTB.Document, IDocumentPaginatorSource)).DocumentPaginator), "printing as paginator")
			End If
		End Sub
	End Class
End Namespace

See Also

RichTextBox Overview
TextBox Overview