VisualBrush做“懒惰评估”?

时间:2011-11-07 14:46:11

标签: wpf visualbrush fixeddocument

我在更多迭代中创建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或什么?

1 个答案:

答案 0 :(得分:0)

在每次迭代中调用VisualBrush上的.Freeze()。否则,它将始终是您指向的任何视觉的实时视图。

编辑:冻结不起作用,但您可以将画笔渲染为静态位图。见http://blog.avanadeadvisor.com/blogs/markti/archive/2008/04/14/10888.aspx