1:新建Silverlight4 应用程序,名称为SLStudy。建好后如下:
2:在SLStudy下新建Silverlight用户控件,Print1.xaml作为要打印的控件。
在Print1.xaml里面添加代码为:
4:修改MainPage.xaml代码如下:
void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
e.PageVisual = new Print1();
}
</div>
在SL4 中提供打印功能的是PrintDocument类,所以先实例化一个该类对象。
接着注册一个PrintPage事件,PrintPage事件在打印的时候会触发。
然后调用printDocument的Print方法来打印。
在PrintDocument的PrintPage事件中,PrintPageEventArgs,是打印的参数。
里面可以获取当前打印机的一些信息。
在这里设置PageVisual,也就是要打印的对象就可以了。
当然我们的打印需求不可能这么简单,也许需要设置Print1的内容。假设我们要修改按钮显示的字,那么我们可以这样:
在这里我总结下:
1:确定要打印的内容,然后新建一个UserControl来显示打印的内容。
2:新建PrintDocument对象,注册PrintPage事件,调用Print方法。
3:在PrintPage事件中,构造要打印的对象,然后去数据库中获取数据,然后把数据绑定到控件上,接着把绑定好数据的控件赋值给PrintPageEventArgs的PageVisual 对象。
多页打印问题:
如果要打印的只有一张,那么这种方法应该就够了,但是有时候需要将一份文档打印多张,
比如将上面的按钮打印5张,那么又该如何实现了。
还记得我们上面PrintPageEventArgs的HasMorePages参数吗?
在PrintPage 事件触发后,默认的HasMorePages 为false。将HasMorePages设置为true,可以让PrintPage事件不断被触发。当 HasMorePages 属性为 true,PrintPage 事件将多次发生,直到 HasMorePages 为 false。
假设我们要将上面的按钮打印5张,那么可以设置4次HasMorePages为true,最后设置HasMorePages为false就可以了。
修改后的printDocument_PrintPage 方法如下:
if (printCount < count) //如果已经打印的页数小于要打印的页数,说明还需要打印。
{
e.HasMorePages = true;
}
else
{
e.HasMorePages = false;
}
}
</div>
有时候需要知道当前打印的是第几页,这可以通过查询printDocument.PrintedPageCount 属性来获得,
在PrintDocument_PrintPage 方法中,sender对象其实就是PrintDocument对象,所以我们可以将它强制类型转换。
假设我们要将上面的5个 Button的内容都修改为1,2,3,4,5.那么我们可以修改代码为:
void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
PrintDocument printDocument = sender as PrintDocument;
Print1 printVisual = new Print1();
printVis