2

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

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

myDocumentViewer.Document = myFixedDocument;

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

我的第二个想法是创建一个主FixedDocument,然后遍历所有FixedDocument,并将它们的页面移动到主FixedDocument中。但是我在尝试执行此操作时遇到了各种问题(与已经属于另一个文档的页面有关(无法从该文档中删除它们!等等等等)

我的第三个想法是创建和构建一个临时XpsDocument,并检索它似乎自动创建的FixedDocumentSequence 。我已经看了一下这个,但它变得感觉不必要的复杂,所以我想我先在这里发帖看看是否有任何其他想法,或者帮助我的前两次尝试!

4

2 回答 2

2

弄清楚了。

实际上,您可以动态创建链接到FixedDocuments的DocumentReference对象:

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

我不太确定我之前是如何错过这种SetDocument方法的。我想我一定一直在寻找DocumentReference.Document带有 getter/setter 的属性。在我看来,在.NET 框架中使用GetDocumentSetDocument方法有点不一致。

于 2011-05-03T10:21:39.840 回答
1

您是否尝试过这样做,我尝试过实施您的第一种方法。我希望这对你有用 -

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);
                            }
                        }
                    }
于 2011-04-29T12:27:22.407 回答