实现 DocumentPaginator 时出现空白页

发布于 2024-12-10 16:42:24 字数 494 浏览 2 评论 0原文

我正在尝试实现这样的分页器:

public class MyPaginator : DocumentPaginator{

  // ommitting details...

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

它编译,运行,但页面是空白的(白色)。 “画布”是 System.Windows.Controls.Canvas 的一个实例。

当我将它放入像 ScrollViewer 这样的屏幕容器中时,它会完美呈现。

XpsDocument _xpsDocument = CreateXpsDoc(myPaginatorInstance);

唯一有效的是将页面的大小设置为画布的大小。我缺少什么?

I'm trying to implement a Paginator like this:

public class MyPaginator : DocumentPaginator{

  // ommitting details...

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

It compiles, it runs, but the page is blank (white). the 'canvas' is an instance of System.Windows.Controls.Canvas.

When I put it in a on-screen container like ScrollViewer it renders perfectly.

XpsDocument _xpsDocument = CreateXpsDoc(myPaginatorInstance);

The only thing that is working is that the page's size is set to the size of the canvas. What am I missing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

听风吹 2024-12-17 16:42:24

我会(再次)回答我自己的风滚草:

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);
}

I'll answer my own tumbleweed (again):

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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文