2010-02-05 13 views
5

Ho una finestra WPF con una cornice. Ho del codice per stampare il contenuto del frame usando printdialog e printvisual. Ma questo stamperà solo ciò che appare sullo schermo anche se i frame scroll e altre parti sono disponibili.WPF - impaginazione durante la stampa di un'immagine

C'è un modo per aggiungere l'impaginazione e assicurarsi che l'intero contenuto della cornice venga stampato.

Oppure c'è un altro modo per ritirare il contenuto della cornice e stamparlo? vale a dire non usare printvisual?

risposta

13

Sì. L'ho fatto. Non è molto difficile.

  1. avvolgere la cornice all'interno di uno ScrollViewer che normalmente ha il suo scorrimento orizzontale e verticale disattivato

  2. Quando si è pronti per la stampa, attivare lo scorrimento verticale. Questo farà sì che al Frame venga detto che ha uno spazio verticale infinito, quindi renderà tutto il contenuto. Quindi chiama UpdateLayout() per aggiornare il layout.

  3. Implementare IDocumentPaginator per restituire lo stesso frame per ogni pagina, ma regolare la clip e RenderTransform ogni volta per mostrare una parte diversa del frame corrente.

  4. Stampa utilizzando la vostra abitudine IDocumentPaginator

La descrizione di cui sopra si presuppone che si desidera correggere la larghezza del telaio alla larghezza della pagina e impaginare in verticale. Questo sarebbe appropriato per una pagina web ma non per un foglio di calcolo. Per i contenuti simili a un foglio di calcolo, devi impostare ScrollViewer per consentire lo scorrimento in entrambe le direzioni, offrendo lo spazio infinito dell'inquadratura in ogni direzione. In questo caso, IDocumentPaginator è lo stesso tranne che RenderTransforms e clipping sono scelti per iterare sia orizzontalmente che verticalmente.

Questa tecnica funziona effettivamente per qualsiasi contenuto WPF, non solo per Frame.

+0

Hi Ray, questo sembra interessante ... puoi darci alcuni esempi di codice su come hai ottenuto questo per favore? Grazie molto! – Sid

+0

Mi piace anche sapere come si fa, Ray. Sono disponibili ** buoni ** campioni o tutorial passo-passo? – DeMama

+0

Forse questo ti aiuterà a iniziare http://robertmcintosh.ca/2011/02/05/paginated-printing-of-wpf-visuals/ –

0

È possibile ricorrere in modo ricorsivo attraverso l'albero visivo con VisualTreeHelper e tradurre tutti i controlli trovati in Elementi per l'utilizzo in un documento di flusso. Questo documento di flusso che puoi stampare. Penso che non ci sia un modo accettabile per stampare un contenuto direttamente dal gui.

Problemi correlati