我在多次迭代中创建FixedDocument(每次迭代一个页面),像这样:
PrintDialog pr = new PrintDialog();
FixedDocument doc = new FixedDocument();
foreach(var i in a)
{
// some changes of MaingGrid here
...
//
VisualBrush vb = new VisualBrush(this.MainGrid);
FixedPage page = new FixedPage();
page.Width = doc.DocumentPaginator.PageSize.Width;
page.Height = doc.DocumentPaginator.PageSize.Height;
Rectangle rec = new Rectangle();
rec.Width = this.MainGrid.ActualWidth;
rec.Height = this.MainGrid.ActualHeight;
rec.Fill = vb;
page.Children.Add(rec);
PageContent content = new PageContent();
((IAddChild)content).AddChild(page);
doc.Pages.Add(content);
}
pr.PrintDocument(doc.DocumentPaginator, "test");
在每次迭代中,我对MainGrid进行了一点更改。因此,每个页面都应该包含MainGrid的实际状态。但是打印的文档包含与上次迭代内容相同的页面(换句话说,最后的状态是文档中所有页面的状态)。是否有任何"懒惰评估"的VisualBrush或什么?
在每次迭代中调用VisualBrush上的.Freeze()
。否则,它将永远是一个实时的视图,无论你指向什么。
编辑:冻结不起作用,但你可以将画笔渲染为静态位图。见http://blog.avanadeadvisor.com/blogs/markti/archive/2008/04/14/10888.aspx