2010-09-16 5 views
3

J'ai un ScrollViewer et un contenu très "long". J'ai écrit une classe qui hérite de DocumentPaginator, mais je ne comprends pas comment créer un "cadre" pour chaque partie de ce Visual? Je veux dire, comment puis-je "regarder" à la page suivante du contrôle? J'ai essayé, mais sans succès:Comment imprimer un visuel avec pagination dans WPF?

public override DocumentPage GetPage(int pageNumber) 
    { 
     double left = pageNumber * pageSize.Width; 
     Point pt = new Point(left, 0); 

     visual.RenderTransform = Transform.Identity; 
     visual.RenderTransform = new TranslateTransform(-left, 0); 

     visual.Measure(pageSize); 
     visual.Arrange(new Rect(visual.DesiredSize)); 

     DocumentPage page = new DocumentPage(visual); 
     return page; 
    } 

Avec ce code je reçois la première page comme il devrait être, la deuxième page est exactement comme la première, et toutes les pages restantes sont vides.

Répondre

1

DocumentPaginator est assez difficile. Voici quelques étapes qui me ont aidée à estimer correctement la taille des pages et assurez-vous qu'il n'y a pas de pages blanches viennent:

Remplacer les deux propriétés IsPageCountValid et PageCount comme:

public override bool IsPageCountValid 
    { 
     get { return true; } 
    } 

et

public override int PageCount 
{ 
    get 
    { 
     if (pageCount == 0) 
     { 
      this.ComputePageCount(); 
     } 
     return pageCount; 
    } 
} 

Utilisez une fonction privée ComputePageCount pour effectuer vos calculs de taille de page (en divisant votre page par le nombre exact de pages Selon un seul pageSize spécifié).

La clé de toutes les capacités de calcul de nombre de pages mise ici

IsPageCountValid = true

qui serait alors toujours que les Paginator utilise vos méthodes outrepassée pour calculer le nombre de pages.

Une taille de page unique peut être spécifiée en définissant la propriété DocumentPaginator.PageSize. Prendre en compte tous les en-têtes/pieds de page dans chaque page.

Généralement les pages vierges/moins sont le résultat de mauvais calculs de PageCount.