Eigentlich mit jeder Menge verschiedener Proben nach Herumspielen, von denen alle unglaublich gewunden sind und erfordern den Einsatz von Document Writer, Container, Druckerwarteschlangen und Druck Tickets, ich Eric Sinks Artikel über Printing in WPF
Der vereinfachte Code gefunden ist nur 10 Zeilen lang
public void CreateMyWPFControlReport(MyWPFControlDataSource usefulData)
{
//Set up the WPF Control to be printed
MyWPFControl controlToPrint;
controlToPrint = new MyWPFControl();
controlToPrint.DataContext = usefulData;
FixedDocument fixedDoc = new FixedDocument();
PageContent pageContent = new PageContent();
FixedPage fixedPage = new FixedPage();
//Create first page of document
fixedPage.Children.Add(controlToPrint);
((System.Windows.Markup.IAddChild)pageContent).AddChild(fixedPage);
fixedDoc.Pages.Add(pageContent);
//Create any other required pages here
//View the document
documentViewer1.Document = fixedDoc;
}
Meine Probe ziemlich simpel ist, ist es nicht Seite Sizing und Orientierung aufweist, die eine ganz andere Reihe von Fragen enthält, wie man es erwarten würde nicht funktionieren. Es enthält auch keine Speicherfunktionalität, da MS anscheinend vergessen hat, eine Save-Schaltfläche in den Document Viewer einzufügen.
Speichern Funktionalität ist relativ einfach (und ist auch von Eric Sinks Artikel)
public void SaveCurrentDocument()
{
// Configure save file dialog box
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
dlg.FileName = "MyReport"; // Default file name
dlg.DefaultExt = ".xps"; // Default file extension
dlg.Filter = "XPS Documents (.xps)|*.xps"; // Filter files by extension
// Show save file dialog box
Nullable<bool> result = dlg.ShowDialog();
// Process save file dialog box results
if (result == true)
{
// Save document
string filename = dlg.FileName;
FixedDocument doc = (FixedDocument)documentViewer1.Document;
XpsDocument xpsd = new XpsDocument(filename, FileAccess.ReadWrite);
System.Windows.Xps.XpsDocumentWriter xw = XpsDocument.CreateXpsDocumentWriter(xpsd);
xw.Write(doc);
xpsd.Close();
}
}
So ist die Antwort Ja ist, können Sie eine vorhandene WPF (XAML) die Kontrolle übernehmen, databind es und machen es zu einem XPS Dokument - und es ist nicht so schwer.
[http://msdn.microsoft.com/en-us/library/system.windows.xps.visualstoxpsdocument.aspx](http://msdn.microsoft.com/en-us/library/system.windows .xps.visualstoxpsdocument.aspx) –