2010-02-05 51 views
5

我有一個框架的WPF窗口。我有一些代碼可以使用printdialog和printvisual打印框架的內容。但是這隻會打印出現在屏幕上的內容,即使畫面滾動和其他部分可用。WPF - 打印視覺時的分頁

有沒有辦法添加分頁,並確保我的框架的整個內容將打印。

或者還有另一種方法可以將我的框架內容打印出來嗎?即不使用視覺?

回答

13

是的。我已經做到了。這不是很困難。

  1. 包裝你構圖的ScrollViewer當你準備打印,使得垂直滾動通常已禁用

  2. 它的水平和垂直滾動內。這將導致Frame被告知它具有無限的垂直空間,因此它將呈現所有的內容。然後調用UpdateLayout()來更新佈局。

  3. 實現IDocumentPaginator爲每個頁面返回相同的幀,但每次調整剪輯和RenderTransform以顯示實際Frame的不同部分。

  4. 打印使用自定義IDocumentPaginator

在上述說明中,你要修復的框架頁面寬度的寬度和垂直分頁它。這適用於網頁,但不適用於電子表格。對於類似電子表格的內容,您可以將ScrollViewer設置爲允許在兩個方向上進行滾動,從而爲每個方向提供了無限的空間。在這種情況下,除了RenderTransforms和裁剪被選擇爲水平和垂直迭代外,IDocumentPaginator是相同的。

這種技術實際上適用於任何WPF內容,而不僅僅是一個框架。

+0

嗨雷,這看起來很有趣...你能給我們一些代碼樣本,你如何實現這個請嗎?非常感謝! – Sid 2013-03-30 16:16:38

+0

我也很想知道這是怎麼完成的,Ray。任何**好**樣本或分步教程可用? – DeMama 2013-11-14 12:45:29

+0

也許這會幫助你開始http://robertmcintosh.ca/2011/02/05/paginated-printing-of-wpf-visuals/ – 2014-11-06 16:46:52

0

您可以使用VisualTreeHelper通過可視化樹進行遞歸循環,並將所有找到的控件轉換爲用於流文檔的元素。您可以打印此流程文檔。我認爲沒有可接受的方式直接從gui打印內容。