2016-05-31 2 views
1

У меня есть холст, к которому я добавляю различные UIElements во время выполнения, и мне нужно иметь возможность печатать его на одной странице формата А4 с дополнительным текстом в сетке внизу.Печать холста и сетки WPF на один A4 Page

Я могу распечатать холст, используя этот код.

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; 
} 

Самая хитрая часть действительно только помнить, что пользовательский интерфейс может иметь только один экземпляр каждого UIElement.

Смежные вопросы