Habs jetzt ein wenig verändert, dann funktionierts. Ich muss die Page manuell erzeugen und den DataContext zuweisen, weiß nicht genau, warum es bei Dir geht und bei mir nicht:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Package pkg = Package.Open(@".\invoice.xps",FileMode.Create); XpsDocument xpsDoc = new XpsDocument(pkg); XpsDocumentWriter xpsWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
FixedDocument fixedDoc = new FixedDocument(); PageContent pageContent = new PageContent(); FixedPage fixedPage = new FixedPage(); fixedPage.DataContext = this;
fixedPage.Children.Add(InvoiceContent); ((IAddChild)pageContent).AddChild(fixedPage); fixedDoc.Pages.Add(pageContent);
xpsWriter.Write(fixedDoc); pkg.Close(); |
Das größte Problem wird jetzt aber etwas Anderes: Ich muss meine Seitenumbrüche manuell vornehmen und da hab ich noch keine Ahnung, wie das funktionieren soll. Hab nur gehört, dass es mit einer von DocumentPaginator abgeleiteten Klasse funktionieren soll und ich dort eben meine eigene Logik einbauen muss. Wie ich das aber mit einer ListView über mehrere Seiten lösen soll, bin ich noch überfragt.
Aber das ist ein anderes Thema
//EDIT: Ich glaube, ich weß, warum es bei Dir ging: Das Zuweisen des DataContexts hast Du unterhalb von Window vorgenommen und auf Window-Ebene wahrscheinlich drucken lassen? Ich habe aber ein Window, dem die Datenquelle zugewiesen ist (meine KLasse, MVVM lässt grüßen
) und darunter per ContentControl meinen InvoiceContent eingebunden und nur das ist der Teil, den ich drucke. Dieser erbt also den DataContext von oben, aber das funktioniert dann nicht mehr mit dem XpsWriter, weil die Hierarchie ja unterbrochen ist. Eigentlich logisch.
Im Endeffekt hab ich mir ein Preview gebaut und genau das lass ich drucken, funktioniert richtig gut, wer braucht da noch Reporting-Komponenten?