我已经创建了一个自定义文档分页器,它接受datatable并根据需要进行打印。我想做一个打印预览。我已经阅读了所有关于如何在内存中创建xps文件并显示它的帖子。我就是不能让它工作。这是我的代码。我使用的是MVVM模式。请注意代码行_data.DocView=fds;它将数据传递给我的视图模型。
PrintDialog dialog = new PrintDialog();
dialog.ShowDialog();
StoreDataSetPaginator paginator = new StoreDataSetPaginator(dt, new Typeface("Calibri"), 8, 96 * 0.75,
new Size(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight));
//this is commented out to attempt the print preview
// dialog.PrintDocument(paginator, "Print out");
MemoryStream ms = new MemoryStream();
Package package = Package.Open(ms, FileMode.Create, FileAccess.ReadWrite);
Uri DocumentUri = new Uri("pack://InMemoryDocument.xps");
PackageStore.AddPackage(DocumentUri, package);
XpsDocument xpsDocument = new XpsDocument(package, CompressionOption.NotCompressed,
DocumentUri.AbsoluteUri);
XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDocument);
writer.Write(paginator);
IDocumentPaginatorSource fds = xpsDocument.GetFixedDocumentSequence();
_data.DocView = fds;
PrintPreviewConduit prntv = new PrintPreviewConduit();
prntv.Show();下面是我的视图模型:
private IDocumentPaginatorSource _docView;
public IDocumentPaginatorSource DocView
{
get { return _docView; }
set
{
_docView = value;
OnPropertyChanged("DocView");
}
}最后是我的XAML:
<Grid>
<DocumentViewer Name="docview" Document="{Binding DocView}"/>
</Grid>我在我的ViewModel中输入了一个转折点"public IDocumentPaginatorSource DocView“,当我把鼠标移到它上面时,我不确定我应该得到什么。我现在花了一段时间,任何帮助都将不胜感激。Sys
发布于 2013-10-27 10:20:12
嗯,我觉得自己很傻。我没有将新窗口的datacontext设置为我的视图模型。现在一切正常了!
PrintPreviewConduit prntv = new PrintPreviewConduit();
prntv.DataContext = _data;
_data.DocView = fds;
prntv.Show();https://stackoverflow.com/questions/19613732
复制相似问题