none
FlowDocument verschwindet von UI nach Speichern als XPS RRS feed

  • 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

    Donnerstag, 16. Februar 2012 20:53

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

    Donnerstag, 23. Februar 2012 11:54

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

    Sonntag, 19. Februar 2012 16:10
  • 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

    Donnerstag, 23. Februar 2012 11:54
  • 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  Twitter Facebook
    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.

    Montag, 5. März 2012 15:34
    Moderator
  • 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

    Mittwoch, 28. März 2012 09:12