2016-05-31 82 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的一个实例。