1

データテーブルを取り、必要に応じて正確に印刷するカスタムドキュメントページネーターを作成しました。印刷プレビューをしたいのですが。メモリ内に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. 何を取得する必要があるのか​​ わかりません. Sys 様

4

1 に答える 1

1

まあ、私はばかだと感じます。ビュー モデルに新しいウィンドウのデータ コンテキストを設定しませんでした。今、すべてが動作します!!!!

PrintPreviewConduit prntv = new PrintPreviewConduit();
prntv.DataContext = _data;
_data.DocView = fds;
prntv.Show();
于 2013-10-27T02:20:12.003 に答える