2011-11-07 47 views
4

我需要及時拍攝控制快照並將它們存儲在一個FixedDocument中。問題在於VisualBrush在某種程度上是「懶惰」的,不會通過將其添加到文檔來評估自己。當我最終創建文檔時,所有頁面都包含相同(最後)的控制狀態。雖然VisualBrush不能被凍結,但還有其他的機會嗎?我想在一個頁面上有更多的快照,所以生成逐頁文檔對我來說不是解決方案。 Aswel將VisualBrush轉換爲位圖(我想將它保存在向量中)。總之 - I need to somehow Freeze() VisualBrush使用存儲在一個固定(流)文檔中的VisualBrush控制時間快照

for(;;) 
{ 
    FixedPage page = new FixedPage(); 
    ... 
    Rectangle rec = new Rectangle(); 
    ... 
    rec.Fill = vb; 
    page.Children.Add(rec); 
    PageContent content = new PageContent(); 
    ((IAddChild)content).AddChild(page); 
    doc.Pages.Add(content); 
} 

回答

3

我用系列化:

string svb = XamlWriter.Save(vb.CloneCurrentValue()); 
// Replace all "Name" attributes (I don't need them already and deserialization would crash on them) with "Tag" - not best practice but it's fast :) 
svb = svb.Replace("Name", "Tag"); 
rect.Fill((VisualBrush)XamlReader.Parse(svb)); 

編輯

更好的辦法是保存視覺的XPS文檔,然後拿回來可視化。 (De)序列化在SharedSizeGroups和許多其他「參考類似的」事情上有一些問題。

XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(doc); 
control.InvalidateArrange(); 
UpdateLayout(); 
writer.Write(control); 
Visual capture = doc.GetFixedDocumentSequence().DocumentPaginator.GetPage(0).Visual; 
+0

我使用它,但非常緩慢。 – lindexi

相關問題