Frage

Ich versuche einen solchen Paginator zu implementieren:

public class MyPaginator : DocumentPaginator{

  // ommitting details...

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

Es kompiliert, es läuft, aber die Seite ist leer (weiß). Die 'Leinwand' ist eine Instanz von System.windows.Controls.Canvas.

Wenn ich es in einen Bildschirmbehälter wie Scrollviewer stecke, wird es perfekt.

XpsDocument _xpsDocument = CreateXpsDoc(myPaginatorInstance);

Das einzige, was funktioniert, ist, dass die Größe der Seite auf die Größe der Leinwand eingestellt ist. Was vermisse ich?

War es hilfreich?

Lösung

Ich werde mein eigenes Tumbleweed (wieder) beantworten:

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top