Domanda

Nel mio WPF app, ho diversi FixedDocument oggetti, che voglio visualizzare insieme in un DocumentViewer , come se fossero un unico documento.

E 'facile per visualizzare un singolo FixedDocument in un visualizzatore di documenti:

myDocumentViewer.Document = myFixedDocument;

La mia prima idea era quella di creare un FixedDocumentSequence di tutta la mia FixedDocuments (che può anche essere impostato come DocumentViewer.Document valore come implementa IDocumentPaginatorSource ). Ma quando si costruisce una FixedDocumentSequence , si può solo aggiungere a una collezione di DocumentReference oggetti. Non esiste un modo semplice per aggiungere un FixedDocument direttamente, e io non riesco a capire come creare e aggiungere un DocumentReference , che è in qualche modo legato a uno dei miei FixedDocuments .

La mia seconda idea era quella di creare un master FixedDocument , e quindi scorrere tutti gli FixedDocuments , e spostare le loro pagine nel master FixedDocument . Ma mi imbatto in tutti i tipi di problemi quando si cerca di fare questo (a che fare con le pagine già appartenente ad un altro documento (senza possibilità di rimuoverli da quel documento! Ecc ecc.)

La mia terza idea era quella di creare e costruire una temporanea XpsDocument , e recuperare il FixedDocumentSequence che sembra automaticamente per creare. Ho guardato questo un po ', ma è sempre di essere quello che si sente inutilmente complessa, quindi ho pensato di postare qui in primo luogo per vedere se ci sono altre idee, o aiutare con i miei primi due tentativi!

È stato utile?

Soluzione

capito.

E 'possibile, infatti, creare dinamicamente DocumentReference oggetti legati alla FixedDocuments :

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

Non sono del tutto sicuro di come ho perso il metodo SetDocument prima. Penso che devo aver cercato per una proprietà DocumentReference.Document con getter / setter. E 'un po' incoerente nel quadro NET per avere invece GetDocument e SetDocument metodi, a mio parere.

Altri suggerimenti

Hai provato a fare questo, ho provato l'implementazione del primo approccio. Spero che questo farà per voi -

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);
                            }
                        }
                    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top