工作原理
Silverlight 4 打印支持允许您指定要打印的 XAML 。整体漂亮,简单。这一切都是使用 PrintDocument 类。此类提供了用于回调来询问你如何打印单个页的多个事件。首先我们来看看简单的 PrintDocument :
PrintDocument doc = new PrintDocument();
doc.DocumentName = "Sample Print";
doc.StartPrint += new EventHandler<StartPrintEventArgs>(doc_StartPrint);
doc.PrintPage += new EventHandler<PrintPageEventArgs>(doc_PrintPage);
doc.Print();
在创建一个新的 PrintDocument 时有一个简单的模式: 设置文档名称、 处理事件和开始打印过程。文档名称是在后台打印程序中显示的名称 (至少在 Windows 中,不能测试它在 Mac 上)。StartPrint / EndPrint 事件称为之前和之后,主要用于安装/拆卸的打印元素。 在打印 方法开始打印过程,并要求用户指定打印机。打印机选择后,打印系统调用的打印机规格从打印机本身确定发送 PrintPage 事件:
void doc_PrintPage(object sender, PrintPageEventArgs e)
{
// 延伸到打印页的大小
printSurface.Width = e.PrintableArea.Width;
printSurface.Height = e.PrintableArea.Height;
// 指定要打印的 XAML 元素
e.PageVisual = printSurface;
// 指定是否再次调用另一个页
e.HasMorePages = false;
}
PrintPage 事件传递一个 PrintPageEventArgs 对象,其中包含两个部分信息。最重要的是,宽度 和 高度,可以用来帮助在打印之前的XAML大小。 它还允许您指定了 PageVisual,这是要打印的任何 UIElement 派生的元素。 通常,这是其中一个控件 (例如 DataGrid) 或其他元素的容器。如果你只在做页面打印,您还可以指定整个页面。 最后,您必须指定是否有更多页打印的HasMorePages 属性。 当HasMorePages 设置为 true,页面在打印和打印第二页再次调用在 PrintPage。