The WPF does not have a native "PrintPreview" dialog as it is there in Winforms. In this blog we will discuss how we can use DocumentViewer control for print previewing WPF Flexgrid.

The process involves creation of an XpsDocument and loads that document using DocumentViewer. For this we will modify the PrintingWPF product sample.

Design MainWindow.xaml


Open the PrintingWPF sample available at the location C:\Users\\Documents\ComponentOne Samples\Studio for WPF\C1.WPF.FlexGrid\CS\PrintingWPF. Add 'Print Preview...' button along with the 'Advanced...' button on the Main Window. Double click on the button subscribe Click event.


Add References


In the Solution Explorer, add reference to the following class libraries :

  • ReachFramework.dll

  • System.Printing.dll


In the Main.Window.cs add the following using directive to code.
using System.Windows.Xps;
using System.Windows.Xps.Packaging;

Adding code for Print Preview


In the Preview button click event, use the following code in which we create an XpsDocument containing the WPF Flexgrid and view the document DocumentViewer, the DocumentViewer is then added to a Window object which serves as the PrintPreview Dialog :

// printing with Preview
void _btnPreview_Click(object sender, RoutedEventArgs e)
{
 var pd = new PrintDialog();

 // calculate page size
 var sz = new Size(pd.PrintableAreaWidth, pd.PrintableAreaHeight);

 // create paginator
 var paginator = new FlexPaginator(_flex, ScaleMode.PageWidth, sz, new Thickness(96 / 4), 100);
 string tempFileName = System.IO.Path.GetTempFileName();

 File.Delete(tempFileName);

 using (XpsDocument xpsDocument = new XpsDocument(tempFileName, FileAccess.ReadWrite))
 {
 XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDocument);
 writer.Write(paginator);
 DocumentViewer previewWindow = new DocumentViewer
 {
 Document = xpsDocument.GetFixedDocumentSequence()
 };

 Window printpriview = new Window();
 printpriview.Content = previewWindow;
 printpriview.Title = "C1FlexGrid: Print Preview";
 printpriview.Show();
 }
}




Download Sample