我正在构建Silverlight 4应用程序。此应用程序将打印ItemsControl的内容。此ItemsControl使用ItemTemplate呈现绑定到控件的项。总之,我有500个与控件绑定的项目。
奇怪的是,当我尝试打印ItemsControl时,它似乎在某一点之后被切断了。我不知道什么时候被切断了。我只知道它被切断了。我预感它与虚拟化有关。但是,我不知道如何克服这一点。目前,我正在打印ItemsControl,如下所示:
private void printHyperlink_Click(object sender, RoutedEventArgs e)
{
PrintDocument printDocument = new PrintDocument();
printDocument.BeginPrint +=
new EventHandler<BeginPrintEventArgs>(printDocument_BeginPrint);
printDocument.PrintPage +=
new EventHandler<PrintPageEventArgs>(printDocument_PrintPage);
printDocument.EndPrint +=
new EventHandler<EndPrintEventArgs>(printDocument_EndPrint);
printDocument.Print("My Items");
}
void printDocument_BeginPrint(object sender, BeginPrintEventArgs e)
{}
void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{ e.PageVisual = myItemsControl; }
void printDocument_EndPrint(object sender, EndPrintEventArgs e)
{}
我做错了什么?如何确保ItemsControl中的所有项目在呈现时都打印出来?
答案 0 :(得分:2)
打印API不会自动为ItemsControl中的项目分页。此外,如果要打印可视树中已有的内容,结果可能会被裁剪以匹配打印时窗口中呈现的内容。
要打印多个页面,您需要:
总而言之,这可能是相当多的工作。如果您只是尝试使用ItemTemplate打印ItemsControl,则必须完成上述所有工作。对于稍微复杂的场景(例如添加页码,页眉/页脚等),还有更多工作要做。
也就是说,可以通过简单的Silverlight打印API构建一个库来执行类似的操作。我最近在博客上写了一个控件,旨在解决这个问题(以及一些更复杂的问题)。
http://www.davidpoll.com/2010/04/16/making-printing-easier-in-silverlight-4/