Показать несколько FixedDocuments в DocumentViewer, как если бы они были одним документом - PullRequest
2 голосов
/ 29 апреля 2011

В моем приложении WPF у меня есть несколько FixedDocument объектов, которые я хочу отобразить вместе в DocumentViewer , как если бы они были одним документом.

Легко отобразить один FixedDocument в средстве просмотра документов:

myDocumentViewer.Document = myFixedDocument;

Моей первой идеей было создать FixedDocumentSequence из всех моих FixedDocuments (которое также можно установить как значение DocumentViewer.Document , поскольку оно реализует IDocumentPaginatorSource ).Но при создании FixedDocumentSequence можно добавлять только в коллекцию DocumentReference объектов.Нет простого способа добавить FixedDocument напрямую, и я не могу понять, как создать и добавить DocumentReference , который каким-то образом связан с одним из моих FixedDocuments .

Моя вторая идея состояла в том, чтобы создать мастер FixedDocument , а затем перебрать все FixedDocuments и переместить их страницы в мастер FixedDocument.Но я сталкиваюсь со всевозможными проблемами, когда пытаюсь это сделать (для страниц, уже принадлежащих другому документу (без возможности удалить их из этого документа! И т. Д. И т. П.)

Моя третья идея заключалась всоздайте и создайте временный XpsDocument и извлеките FixedDocumentSequence , который, кажется, автоматически создается. Я немного посмотрел на это, но это становится тем, что кажется излишне сложным, поэтомуЯ решил опубликовать здесь сначала, чтобы узнать, есть ли другие идеи или помочь с моими первыми двумя попытками!

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Разобрался.

На самом деле вы можете динамически создавать DocumentReference объекты, связанные с FixedDocuments :

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

I'mне совсем уверен, как я пропустил SetDocument метод раньше.Я думаю, что я, должно быть, искал DocumentReference.Document свойство с getter / setter.На мой взгляд, немного противоречиво в .NET Framework иметь методы GetDocument и SetDocument .

1 голос
/ 29 апреля 2011

Вы пытались сделать это, я пытался реализовать ваш первый подход.Я надеюсь, что это сработает для вас -

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);
                            }
                        }
                    }
...