realtà dopo nei guai con cumuli di diversi campioni, che sono tutti incredibilmente contorta e richiedono l'uso di Document scrittori, Container, code di stampa e stampare biglietti, ho trovato un articolo di Eric Lavelli circa Printing in WPF
Il codice semplificato è un soli 10 linee lunghe
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;
}
mio campione è abbastanza semplicistico, non include pagina Dimensionamento e l'orientamento che contiene tutta una serie diversa di questioni che non funzionano come ci si aspetterebbe. Né contiene alcuna funzionalità di salvataggio come MS sembra aver dimenticato di includere un pulsante Salva con Document Viewer.
Salva funzionalità è relativamente semplice (ed è anche da un articolo di Eric Lavelli)
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();
}
}
Quindi la risposta è sì, si può prendere uno esistente WPF (XAML) di controllo, DataBind e trasformarlo in un XPS documento - e non è poi così difficile.
[http://msdn.microsoft.com/en-us/library/system.windows.xps.visualstoxpsdocument.aspx](http://msdn.microsoft.com/en-us/library/system.windows .xps.visualstoxpsdocument.aspx) –