在我的WPF应用程序中,我有几个 FixedDocument 对象,我想在 DocumentViewer 中一起显示,就像它们是单个文档一样。
在文档查看器中显示单个 FixedDocument 很容易:
myDocumentViewer.Document = myFixedDocument;
我的第一个想法是创建所有 FixedDocuments 的 FixedDocumentSequence (也可以将其设置为 DocumentViewer.Document 值,因为它实现 IDocumentPaginatorSource )。但是在构建 FixedDocumentSequence 时,只能添加到 DocumentReference 对象的集合中。没有直接的方法来直接添加 FixedDocument ,我无法弄清楚如何创建和添加 DocumentReference ,它以某种方式链接到我的之一FixedDocuments
我的第二个想法是创建一个主 FixedDocument ,然后遍历所有 FixedDocuments ,并将他们的页面移动到主 FixedDocument 。但是在尝试这样做时遇到了各种各样的问题(与已经属于另一个文档的页面有关(无法从该文档中删除它们等等)。
我的第三个想法是创建和构建一个临时的 XpsDocument ,并检索它自动似乎创建的 FixedDocumentSequence 。我已经看过这个了,但它会变得不必要复杂,所以我想我先在这里发帖,看看是否还有其他想法,或者帮助我前两次尝试!
答案 0 :(得分:2)
想出来。
事实上,您可以动态创建链接到 FixedDocuments 的 DocumentReference 对象:
var documentReference = new DocumentReference();
documentReference.SetDocument(document);
fixedDocumentSequence.References.Add(documentReference);
我不太确定我之前是如何错过SetDocument
方法的。我想我一定在寻找带有getter / setter的DocumentReference.Document
属性。在我看来,在.NET框架中有一点点不一致,而是使用 GetDocument 和 SetDocument 方法。
答案 1 :(得分: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);
}
}
}