簡體   English   中英

使用自定義分頁器和XpsDocumentWriter的打印預覽未顯示在DocumentViewer中

[英]Print preview using custom paginator and XpsDocumentWriter not displaying in DocumentViewer

我創建了一個自定義文檔分頁器,該分頁器接受一個數據表並完全按照我的需要進行打印。 我想做一個打印預覽。 我已經閱讀了有關如何在內存中創建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”上輸入了一個斷點,當我將鼠標懸停在該斷點上時,我得到了“ System.Windows.Documents.FixedDocumentSequence。不確定我應該得到什么。我花了好一陣子了,現在得到了任何幫助將不勝感激。

好吧,我覺得很蠢。 我沒有將新窗口的數據上下文設置為我的視圖模型。 現在一切正常!!!

PrintPreviewConduit prntv = new PrintPreviewConduit();
prntv.DataContext = _data;
_data.DocView = fds;
prntv.Show();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM