4

Controlのスナップショットを時間内に取得し、それらを1つのFixedDocumentに保存する必要があります。問題は、VisualBrushがどういうわけか「怠惰」であり、ドキュメントに追加しても自分自身を評価しないことです。最終的にドキュメントを作成すると、すべてのページに同じ(最後の)コントロールの状態が含まれます。VisualBrushをフリーズすることはできませんが、他にフリーズする機会はありますか?1ページにスナップショットを増やしたいので、ページごとにドキュメントを生成することは私にとって解決策ではありません。VisualBrushをビットマップに変換するのと同じように(ベクトルで保持したい)。要するに -I need to somehow Freeze() 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);
}
4

1 に答える 1

4

シリアル化を使用しました:

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));

編集

より良い方法は、VisualをXPSドキュメントとして保存してから、Visualを元に戻すことです。(逆)シリアル化には、SharedSizeGroupsや他の多くの「参照のような」ものにいくつかの問題があります。

XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(doc);
control.InvalidateArrange();
UpdateLayout();
writer.Write(control);
Visual capture = doc.GetFixedDocumentSequence().DocumentPaginator.GetPage(0).Visual;
于 2011-11-08T07:00:20.610 に答える