在DocumentViewer中显示几个FixedDocuments,就像它们是单个文档一样



在我的WPF应用程序中,我有几个FixedDocument对象,我想把它们一起显示在DocumentViewer中,就好像它们是一个文档一样。

在文档查看器中显示单个FixedDocument很容易:

myDocumentViewer.Document = myFixedDocument;

我的第一个想法是创建一个FixedDocumentSequence我所有的FixedDocuments(也可以设置为DocumentViewer)。文档值,因为它实现IDocumentPaginatorSource)。但是当构建FixedDocumentSequence时,只能添加到DocumentReference对象集合中。没有直接添加FixedDocument的直接方法,我不知道如何创建和添加DocumentReference,它以某种方式链接到我的FixedDocuments

我的第二个想法是创建一个主FixedDocument,然后循环遍历所有的FixedDocuments,并将它们的页面移动到主FixedDocument。但我遇到了各种各样的问题,当试图这样做(做与页面已经属于另一个文档(没有能力从该文档中删除它们!等等。)我的第三个想法是创建并构建一个临时的XpsDocument,并检索它自动创建的FixedDocumentSequence。我已经对此进行了一些研究,但它变得越来越复杂,所以我想我应该先在这里发布,看看是否有其他的想法,或者对我的前两次尝试有所帮助!

我明白了

事实上,你可以动态地创建DocumentReference对象链接到FixedDocuments:

var documentReference = new DocumentReference();
documentReference.SetDocument(document);
fixedDocumentSequence.References.Add(documentReference);

我不太确定我之前怎么错过了SetDocument方法。我想我一定是在寻找一个带有getter/setter的DocumentReference.Document属性。在我看来,在。net框架中使用GetDocumentSetDocument方法是有点不一致的。

你试过这样做吗,我试过实现你的第一种方法。我希望这对你有用-

FixedDocument destFixedDoc = new FixedDocument();
    foreach (FixedDocument sourceFixedDoc in YourCollection)
                    {
                        if ((sourceFixedDoc != null) && (sourceFixedDoc.Pages != null))
                        {
                            foreach (PageContent sourcePage in sourceFixedDoc.Pages)
                            {
                                PageContent newPage = new PageContent();
                                newPage.Source = sourcePage.Source;
                                (newPage as IUriContext).BaseUri = ((IUriContext)sourcePage).BaseUri;
                                newPage.GetPageRoot(true);
                                destFixedDoc.Pages.Add(newPage);
                            }
                        }
                    }

相关内容

  • 没有找到相关文章

最新更新