Silverlight作为一门新技术推出已经三年,在Silverlight早期版本,大家都认为Silverlight的功能 无法和Flex进行对比,更是无法超越Flex,在2009年11月,微软推出了Silverlight 4测试版本,以其强 大的功能又一次吸引了众多开发人员的眼球,许多曾经在Flex下支持的功能,现在Silverlight下已经可 以实现,而且还有一些新的功能,Flex无法实现。例如,Silverlight 4的COM组件交互,从桌面拖拉对象 到Silverlight应用等功能。为了使更多的开发人员了解Silverlight开发平台,我将对 Silverlight 4和 Flex 4进行一系列的对比,希望能帮助开发人员了解更多Silverlight新功能。本文,将对Silverlight 4 和Flex 4的打印功能进行对比。
Silverlight 4打印功能
Silverlight 4的打印功能是由PrintDocument类进行控制,实现打印功能需要按照以下步骤:
步骤1:建立PrintDocument对象;
步骤2:在PrintDocument对象中设置文档名;
步骤3:添加事件句柄到PrintPage事件中,同时也可以添加到StartPrint和EndPrint事件中;
步骤4:在PrintPage打印事件中,建立一个打印窗口,该窗口将作为父窗口出现,可以添加想打印的 内容或者控件到该打印窗口。例如建立一个StackPanel,然后在StackPanel中添加想打印的内容控件;
步骤5:在打印时,如果HasMorePages为True,说明支持多个页面进行打印;
步骤6:重复4和5步骤,就可以实现完整的Silverlight 4打印功能;
看起来这些步骤是不是很简单。下面提供一个例程代码,点击打印按钮后,会打印出“Hello World” 。
1: using System;
2: using System.Windows;
3: using System.Windows.Controls;
4: using System.Windows.Printing;
5:
6: namespace HelloPrinter
7: {
8: public partial class MainPage : UserControl
9: {
10: public MainPage()
11: {
12: InitializeComponent();
13: }
14:
15: private void button1_Click(object sender, RoutedEventArgs e)
16: {
17: PrintDocument printDoc = new PrintDocument ();
18: printDoc.DocumentName = "Hello World from Silverlight";
19: printDoc.PrintPage += new EventHandler<PrintPageEventArgs>(printDoc_PrintPage);
20: printDoc.Print();
21: }
22:
23: void printDoc_PrintPage(object sender, PrintPageEventArgs e)
24: {
25: StackPanel panel = new StackPanel() { Orientation = Orientation.Horizontal };
26: panel.Children.Add(new TextBlock() { Text = "Hello ",
FontFamily = new System.Windows.Media.FontFamily("Arial"), FontSize = 12 });
27: panel.Children.Add(new TextBlock() { Text = "World",
FontFamily = new System.Windows.Media.FontFamily("Arial"), FontSize = 12 });
28: e.PageVisual = panel;
29: e.HasMorePages = false;
30: }
31: }
32: }
当点击按钮后,会调用打印事件句柄,在打印过程中,Silverlight将自动设置打印窗口的宽和高,可 以通过PrintableArea属性获取在打印事件中获取打印页面的宽和高。