我创建FixedDocument
和动态添加页面到它。
public partial class Window1 : Window
{
FixedDocument fd = new FixedDocument();
TextBlock page1Text = new TextBlock();
public Window1()
{
InitializeComponent();
}
private void Print_Click(object sender, RoutedEventArgs e)
{
PrintDialog pd = new PrintDialog();
fd.DocumentPaginator.PageSize = new Size(pd.PrintableAreaWidth, pd.PrintableAreaHeight);
for (int i = 0; i <= 5; i++)
{
FixedPage page1 = new FixedPage();
page1.Width = fd.DocumentPaginator.PageSize.Width;
page1.Height = fd.DocumentPaginator.PageSize.Height;
pages();
page1.Children.Add(page1Text);
PageContent page1Content = new PageContent();
((IAddChild)page1Content).AddChild(page1);
fd.Pages.Add(page1Content);
}
DocumentViewer dr = new DocumentViewer();
dr.Height = 700;
dr.Document =fd;
stack.Children.Add(dr);
}
private void pages()
{
page1Text.Text = "This is a test";
page1Text.FontSize = 40;
page1Text.Margin = new Thickness(96);
}
}
该代码仍然给错误page1content是另一位家长的孩子。
这是一个简单的错误诊断; 一个视觉永远只能有一个父否则你将不得不在一个循环依赖VisualTree
。 检查你的代码检查,如果您使用的是相同的视觉两次。
如果你想在视觉出现在两个地方同时,那么你需要复制它; 如果第二个用途是故意的,那么你可以取消父视觉从父删除自身。 例如( canvas.Parent.Remove(canvas)
)。
在代码示例中贴出我可以识别的地方,这将发生在至少一个实例,并详述如下这一点。
您要添加的实例vCanvas
比你一次while(loop)
块。 您需要创建一个新的Canvas
的每个迭代。
var visual = /* unknown */;
var fd = new FixedDocument();
while(loop)
{
var canvas = PageInit();
var page = new FixedPage();
page.Width = visual.DocumentPaginator.PageSize.Width;
page.Height = visual.DocumentPaginator.PageSize.Height;
page.Children.Add(canvas);
PageContent pageContent = new PageContent();
((IAddChild)pageContent).AddChild(page);
visual.Pages.Add(pageContent);
}
对于此示例的目的,我将在Canvas
在PageInit()
private Canvas PageInit()
{
var tb = new TextBlock();
tb.Text = "From Data";
var canvas = new Canvas();
canvas.Children.Add(tb);
return canvas;
}
我做的。 该解决方案是如下
private void Print_Click(object sender, RoutedEventArgs e)
{
PrintDialog pd = new PrintDialog();
fd.DocumentPaginator.PageSize = new Size(pd.PrintableAreaWidth,fd.PrintableAreaHeight);
for (int i = 0; i <= 5; i++)
{
FixedPage page1 = new FixedPage();
page1.Width = fd.DocumentPaginator.PageSize.Width;
page1.Height = fd.DocumentPaginator.PageSize.Height;
UIElement page1Text = pages();
page1.Children.Add(page1Text);
PageContent page1Content = new PageContent();
((IAddChild)page1Content).AddChild(page1);
fd.Pages.Add(page1Content);
}
DocumentViewer dr = new DocumentViewer();
dr.Height = 700;
dr.Document =fd;
stack.Children.Add(dr);
}
private UIElement pages()
{
Canvas pcan = new Canvas();
TextBlock page1Text = new TextBlock();
page1Text.Text = "This is a test";
page1Text.FontSize = 40;
page1Text.Margin = new Thickness(96);
pcan.Children.Add(page1Text);
return pcan;
}
您可以跳过画布。 这是我的项目的需求量的,所以我是想它。