2016-05-31 85 views
1

我有一個畫布,我在運行時添加了各種UIElements,我需要能夠將其打印到單個A4頁面,並在底部的網格中添加一些其他文本。打印WPF畫布和網格到單個A4頁面

我可以使用此代碼打印畫布。

Dim printdlg = New PrintDialog 
If printdlg.ShowDialog() Then printdlg.PrintVisual(GraphCanvas, "My Result") 

我只需要在下面打印一個網格並理想地將其全部縮放到1頁。

我見過FlowDocuments,但無法弄清楚如何添加我的畫布。

任何幫助表示讚賞。

羅布

回答

0

你有幾個問題包在一個這裏。要開始,我會專注於似乎是主要問題 - 如何將Canvas添加到FlowDocument

using System.Windows.Controls; 
using System.Windows.Documents; 
. . . 
public FlowDocument ToFlowDocument(Canvas canvas) 
{ 
    var flowdoc = new FlowDocument(); 
    var newCanvas = new Canvas(); 

    // UI elements can only have one instance per UI. 
    // Move from canvas to flowdoc here. 
    for (int i = 0; i < canvas.Children.Count; i++) 
    { 
     var child = canvas.Children[i]; 
     canvas.Children.Remove(child); 

     newCanvas.Children.Add(child); 
    } 

    var container = new BlockUIContainer(newCanvas); 
    flowdoc.Blocks.Add(container); 
    return flowdoc; 
} 

最棘手的部分實際上只是記住,UI只能有每個UIElement的一個實例。