【发布时间】:2017-05-30 09:32:35
【问题描述】:
我需要编写自己的 pdf 查看器 (UserControl)。我为此使用 pdfium.dll。它的包装是 PdfiumService。此服务可以将页面呈现到 BitmapSource。 PdfViewer 在 ScrollViewer 中的 VirtualizingStackPanel 中显示页面。 任何想法如何为 pdf 进行延迟渲染?问题是如果 pdf 大约 20mb(1000 页),渲染页面需要大约 2gb 内存。
VirtualizingStackPanel 可以帮助我吗?我没有找到“BeginVirtualizing”或其他任何事件。有什么简单的方法可以知道现在正在显示什么项目?
也许是这样的:
- 计算一次可以显示多少页。
- 查看 ScrollViewer 的偏移量。
- 计算现在显示的页面索引。
- 在当前页面旁边呈现 5 个页面。
是否有任何现成的解决方案,或一些提示或想法?
【问题讨论】:
-
您可以使用滚动查看器内部的 ItemConrol,然后使用滚动查看器垂直偏移量创建虚拟化。
-
是的,当然。问题不在于它。我在其中使用 ScrollViewer 和 ItemsControl,并且 ItemsControl.ItemsPanel 是 VirtualizingStackPanel。我知道如何将数据绑定到容器。有没有办法做我想做的事?还是仅手动计算偏移量和图像大小?
-
我认为没有任何简单的方法,因为您还必须仅加载可见的页面,以便您可以根据该页面进行计算
-
不好。还是谢谢你。