65.9K
CodeProject 正在变化。 阅读更多。
Home

Silverlight 4:打印功能

2010 年 4 月 24 日

CPOL

3分钟阅读

viewsIcon

70658

downloadIcon

2108

Silverlight 4 现在支持使用打印 API 的打印功能。使用这些 API,您现在可以打印整个应用程序屏幕或应用程序的一部分。此外,您还可以在打印部分/完整应用程序时自定义外观。在本文中,我将带您深入了解。

引言

Silverlight 4 现在支持使用打印 API 的打印功能。使用这些 API,您现在可以打印整个应用程序屏幕或应用程序的一部分。此外,您还可以在打印部分/完整应用程序时自定义外观。在本文中,我将带您深入了解打印 API。

从 XAML 设计开始

让我们从一个新的空白 Silverlight 应用程序项目开始。打开 Visual Studio 2010,单击“文件”–>“新建”–>“项目”,或者只需按 CTRL + SHIFT + N 即可打开新建项目对话框。现在展开“Visual C#”部分并选择“Silverlight”。从右侧窗格中,选择“Silverlight 应用程序”,选择创建项目的位置并提供一个合适的名称(这里我使用“Silverlight4.PrintingAPI.Demo”作为项目名称)。单击“确定”,这将弹出另一个对话框。选择“Silverlight 4”并点击“确定”以创建空白的 Silverlight 应用程序。

Visual Studio 将自动为您创建一个“MainPage.xaml”,并在您的 Visual Studio IDE 中显示。您现在可以根据您的需要设计您的应用程序。让我们在页面中添加一些内容

<Canvas x:Name="cnvContainer">
<Border BorderBrush="#FFC7851A" BorderThickness="1" Height="118" 
    HorizontalAlignment="Left" Margin="12,26,0,0" Name="border1"
    VerticalAlignment="Top" Width="376" Background="#42F5E0A7" />
<TextBlock Text="Silverlight 4 Printing API Demo" FontWeight="Bold"
    HorizontalAlignment="Left" FontSize="20" Margin="26,41,0,225" Width="353" />
<ProgressBar Height="18" HorizontalAlignment="Left" Margin="26,108,0,0"
    Name="progressBar1" Value="75" VerticalAlignment="Top" Width="353" />
</Canvas>
<Button Content="Print" Height="23" HorizontalAlignment="Left" Margin="166,244,0,0"
    Name="btnPrint" VerticalAlignment="Top" Width="75" Click="btnPrint_Click" /> 

在这里,我在“MainPage.xaml”中的主 Grid 面板“LayoutRoot”中添加一个“Border”、“TextBlock”、“ProgressBar”和一个“Button”。一旦我们单击按钮,我们将开始打印工作。因此,为按钮添加了 Click 事件。

这是 UserControl/Page 中的完整 XAML

<Grid x:Name="LayoutRoot" Background="White" HorizontalAlignment="Center"
    VerticalAlignment="Top">
<Canvas x:Name="cnvContainer">
<Border BorderBrush="#FFC7851A" BorderThickness="1" Height="118"
    HorizontalAlignment="Left" Margin="12,26,0,0" Name="border1"
    VerticalAlignment="Top" Width="376" Background="#42F5E0A7" />
<TextBlock Text="Silverlight 4 Printing API Demo" FontWeight="Bold"
    HorizontalAlignment="Left" FontSize="20" Margin="26,41,0,225" Width="353" />
<ProgressBar Height="18" HorizontalAlignment="Left" Margin="26,108,0,0"
    Name="progressBar1" Value="75" VerticalAlignment="Top" Width="353" />
</Canvas>
<Button Content="Print" Height="23" HorizontalAlignment="Left" Margin="166,244,0,0"
    Name="btnPrint" VerticalAlignment="Top" Width="75" Click="btnPrint_Click" />
</Grid>

如果现在运行您的应用程序,它将类似于这样

image

从代码开始

这都是关于我们示例应用程序的设计部分。如果您现在运行您的应用程序并单击按钮,它将不会为您做任何事情。您可能会问“为什么?”,答案是我们没有编写任何用于打印的代码。所以,让我们跳到那个部分。当按下按钮时,让我们编写代码以从 Silverlight 应用程序中打印此页面。由于我们已经将 Click_Event 注册到按钮,您将在代码隐藏文件“MainPage.xaml.cs”中找到事件实现。在其中编写以下代码以创建 PrintDocument 并要求浏览器打印您的应用程序

PrintDocument document = new PrintDocument();
document.PrintPage += (s, args) =>
{
args.PageVisual = this.LayoutRoot;
};
document.Print("Silverlight Print Application Demo");

现在,运行您的应用程序,一旦它在浏览器中打开,单击“打印”按钮。如果您已经在您的 PC 上安装了打印机,您将注意到打印机选项页面在您的桌面上打开。选择您选择的打印机,然后单击“打印”。这将打印您的整个应用程序。

image

What Next?

那么接下来呢?我们可以打印应用程序的一小部分吗?答案是“是的,为什么不呢?”让我们做一个小技巧来打印一小部分。准备好了吗?嗯…打开您的 XAML 文件“MainPage.xaml”。您将看到 Grid 中有一个 Canvas ,其中包含 bordertextblock progressbar。该 button 设置在名为“cnvContainer”的 Canvas 之外。让我们只打印应用程序的 canvas 部分。转到您的“MainPage.xaml.cs”文件并修改 click 事件实现。最新的代码将如下所示

PrintDocument document = new PrintDocument();
document.PrintPage += (s, args) =>
{
args.PageVisual = this.cnvContainer;
};
document.Print("Silverlight Print Application Demo");

如果您查看实现,您将看到我只修改了 PrintPage 实现。之前 PageVisual 设置为 grid“LayoutRoot”,现在已更改为 canvas“cnvContainer”。运行您的应用程序并单击打印按钮。将弹出相同的打印选项。选择您的打印机,然后再次单击打印。这将仅打印我们在 PageVisual 中选择的部分。如果您回忆之前的打印页面,页面内有一个按钮,但现在它不在那里。为什么?因为我们为打印选择的 cnvContainer 不包含“Print”按钮。

image

结束语

我想,这将让您了解 Silverlight 4 的打印功能,现在您可以继续在您的应用程序中包含它。您可以根据您的需要自定义打印视图。这将有利于从您的 Silverlight 应用程序中打印“录取通知卡”、“用户输入的文本”等。

历史

  • 2010 年 4 月 24 日:初始帖子
© . All rights reserved.