如何在silverlight应用程序上提供打印选项。我可以使用PrintDocument类进行打印,但它会切割边缘。 有没有办法缩小视图以适应打印纸。谢谢你的帮助。 我使用以下代码:
PrintDocument document = new PrintDocument();
document.PrintPage += (s, args) =>
{
args.PageVisual = this.LayoutRoot;
};
document.Print("Silverlight Print Application Demo");
答案 0 :(得分:0)
这里有两个概念上不同的任务:
由于你抱怨边缘的切断,我认为你想做后者。为此,我不会添加当前控件的布局根,我怀疑你正在做。添加尚未添加到可视树中的内容,或在打印前将其从父目录中删除。
如果由于某种原因必须首先删除它(可能是因为用户需要先与它进行交互),然后将该元素存储在变量printedPage
中,您可以将其重新添加到可视树中。 PrintDocument.EndPrint
事件。
对于主事件处理程序,请使用以下内容:
void HandlePrintPage(object sender, PrintPageEventArgs e)
{
var panel = new Grid();
// get an element to print that is not attached to the visual tree
printedPage = GetDetachedPageToPrint();
panel.Children.Add(printedPage.ReportPage);
// we wrap it in a Viewbox to make it full-page
var viewbox = new Viewbox() { Child = panel };
// we need to have a measure pass
viewbox.Measure(e.PrintableArea);
e.PageVisual = viewbox;
// for more pages, we would need to be more careful
//with parent detachments
e.HasMorePages = false;
}
答案 1 :(得分:0)
几个月前我遇到了同样的问题并尝试了几种解决方案。
我已经在另一篇文章中回答了这个问题。请看看:
https://stackoverflow.com/a/20896774/1141477
它将框架元素转换为图像并将其放入矩形内,该矩形与printableArea的大小相同。它对我很有用。
希望它有所帮助!