Pregunta

Estoy tratando de implementar un paginador como este:

public class MyPaginator : DocumentPaginator{

  // ommitting details...

  public override DocumentPage GetPage(int pageNumber) {
    DocumentPage page = new DocumentPage(canvas);
    return page;
  }
}

Se compila, se ejecuta, pero la página está en blanco (blanco). El 'Canvas' es una instancia de System.Windows.Controls.Canvas.

Cuando lo puse en un recipiente en pantalla como ScrollViewer, se vuelve perfectamente.

XpsDocument _xpsDocument = CreateXpsDoc(myPaginatorInstance);

Lo único que funciona es que el tamaño de la página está configurado en el tamaño del lienzo. ¿Qué me estoy perdiendo?

¿Fue útil?

Solución

Responderé a mi propia envoltorio (de nuevo):

public override DocumentPage GetPage(int pageNumber) {
  Canvas container = new Canvas();
  container.Children.Add(canvas);
  double scaleX = pageSize.Width / canvas.Width;
  double scaleY = pageSize.Height / canvas.Height;
  container.RenderTransform = new ScaleTransform(scaleX, scaleY);

  container.Width = PageSize.Width;
  container.Height = PageSize.Height;
  container.Measure(PageSize);
  container.Arrange(new Rect(new Point(0, 0), PageSize));

  Rect contentBox = new Rect(PageSize);

  return new DocumentPage(container, PageSize, contentBox, contentBox);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top