Benutzer mit den meisten Antworten
FlowDocument verschwindet von UI nach Speichern als XPS

Frage
-
Hallo,
ich habe ein für mich bisher unerklärliches Problem.
Ich habe ein FlowDocument, welches ich als XPS-Datei speichern möchte.
Zum Speichern rufe ich folgende Methode auf:
private void SaveFlowAsXps(string fileName) { XpsDocument xps = new XpsDocument(fileName, FileAccess.Write); XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xps); writer.Write((this.Druckvorschau_FD as IDocumentPaginatorSource).DocumentPaginator); xps.Close(); }
Sobald ich diese Methode aufrufe, verschwindet das bisher angezeigte FlowDocument aus meinem Fenster.
Gibt es einen Grund dafür und wie kann ich es ändern, sodass das FolwDocument weiterhin angezeigt wird.
Gruß Markus
Antworten
-
Hallo Markus,
leider kann ich dir nicht mit deinem eigentlichen Problem helfen, aber zumindest einen Ansatz bieten, mit dem du eine vollwärtige Kopie des FlowDocuments erstellen kannst.
MemoryStream memoryStream = new MemoryStream(); FlowDocument copy = new FlowDocument(); TextRange source = new TextRange( this.Druckvorschau_FD.ContentStart, this.Druckvorschau_FD.ContentEnd); source.Save(memoryStream, DataFormats.Xaml); TextRange destination = new TextRange(copy.ContentStart, copy.ContentEnd); destination.Load(memoryStream, DataFormats.Xaml);
Hoffe du kannst damit deine lästige Vervielfachung zumindest etwas einschränken.
Gruß Alexander
- Als Antwort vorgeschlagen Alexander Serowy Donnerstag, 23. Februar 2012 12:15
- Als Antwort markiert Robert BreitenhoferModerator Montag, 5. März 2012 15:34
Alle Antworten
-
Hallo,
hat denn keiner eine Idee hierzu?
Bisher habe ich das Problem so gelöst, das ich mir den Code für das FlowDocument kopiert habe, und eine Version im Fenster anzeige und die andere zum Speichern nutze welche dafür in der Visibility-Property auf collapsed gesetzt wurde.
Dadurch ist allerdings der XAML Code recht unübersichtlich und natürlich müssen alle Änderungen immer doppelt gemacht werden.
Gibt es da nicht eine einfachere Lösung? Wenn nicht, ist es dann möglich mittels C#-Code das gesamte Flowdokument zu kopieren und zum speichern zu verwenden?
Gruß Markus
-
Hallo Markus,
leider kann ich dir nicht mit deinem eigentlichen Problem helfen, aber zumindest einen Ansatz bieten, mit dem du eine vollwärtige Kopie des FlowDocuments erstellen kannst.
MemoryStream memoryStream = new MemoryStream(); FlowDocument copy = new FlowDocument(); TextRange source = new TextRange( this.Druckvorschau_FD.ContentStart, this.Druckvorschau_FD.ContentEnd); source.Save(memoryStream, DataFormats.Xaml); TextRange destination = new TextRange(copy.ContentStart, copy.ContentEnd); destination.Load(memoryStream, DataFormats.Xaml);
Hoffe du kannst damit deine lästige Vervielfachung zumindest etwas einschränken.
Gruß Alexander
- Als Antwort vorgeschlagen Alexander Serowy Donnerstag, 23. Februar 2012 12:15
- Als Antwort markiert Robert BreitenhoferModerator Montag, 5. März 2012 15:34
-
Hallo Numax09,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Hallo Alexander,
die Idee ist ganz gut, habe ähnlichen Code mehrfach im Internet gefunden. Leider gibt es aber ein "riesiges" Problem damit: es werden keine InlineUIContainer und BlockUIContainer kopiert, die fehlen dann einfach in der Kopie.
Hat jemand eine Idee, wie man die InlineUIContainer auch mit kopiert?
Danke
Sven