VisualBrush делает "ленивую оценку"? - PullRequest
2 голосов
/ 07 ноября 2011

Я создаю 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 голосов
/ 07 ноября 2011

Вызовите .Freeze() на VisualBrush в каждой итерации. В противном случае, он всегда будет в режиме реального времени на любой визуальный объект, на который вы указали.

РЕДАКТИРОВАТЬ: Freeze не работает, но вы можете сделать кисть в статическом растровом изображении. Смотри http://blog.avanadeadvisor.com/blogs/markti/archive/2008/04/14/10888.aspx

...