Basic printing can be accomplished through the PrintDocument class. For example, to print the entire contents of the LayoutRoot grid:
private void btnSimplePrint_Click(object sender, RoutedEventArgs e)
string docName = "Test SL4 Print";
PrintDocument doc = new PrintDocument();
doc.PrintPage += (s, args) =>
// print the entire contents of our page (i.e. the
// outer grid called LayoutRoot)
args.PageVisual = LayoutRoot;
doc.Print(docName); // automatically shows a print dialog box
Various properties are avaible on the PrintPageEventArgs that are passed to the PrintPage event handle ('args' in the above example); args.HasMorePages allows you to control multi-page printing and args.PrintableArea allows you to get the printable page area you have available to you (which will depend on the settings chosen in the print dialog box that is shown automatically for you.
It is up to the developer to handle more complex scenarios such as overflowing contents, knowing if there are more pages required, etc. In an enterprise situation other PDF-scentric options may be a better choice, especially if there are complex report layouts required, etc. For example, using iText.NET, FOP, or an enterprise solution such as Thunderhead, xPression, etc.