在 Windows Phone 上实现可滚动表格

2024-01-24

我需要创建一个电视指南应用程序。要求是 UI 必须是您可以在此处看到的 UI 的副本:raspored.bnet.hr http://raspored.bnet.hr。正如您所看到的,有很多数据。所以,基本上它是一个大的可滚动表格。由于 Windows Phone 上没有像 table 这样的 UI 控件,我发现最好的方法是创建一个垂直列表框,并将水平列表框作为其项目。这一切都很好,我能够创建它。但是,为了使其表现得像表格,我还需要使这些水平列表框同步滚动,而不是一次滚动一行。然后我禁用了水平列表框上的水平滚动,并在父(垂直)列表框中启用了它,虽然它给出了我想要实现的结果,但出现了一个大问题 - UI 虚拟化。我知道 ListBox 默认启用了 UI 虚拟化,并且在垂直列表框上滚动时我可以看到它,但是当我在水平列表框上禁用水平滚动时,性能非常糟糕,有时会出现 OutOfMemoryException。我理解为什么会发生这种情况,因为当我禁用水平滚动时,这些列表框不再知道屏幕上有哪些项目,因此将它们全部加载到内存中。

我还尝试过在每个列表框上保留滚动条,以便它们具有 UI 虚拟化,然后将 ScrollViewer 放在它们上方。然后我尝试监听滚动查看器上的操作事件,并根据需要以编程方式滚动所有列表框。这效果不佳,首先,ManipulationDelta 事件似乎触发频率不够高,无法使滚动平滑,而且我认为在大约 180 个列表框上调用 ScrollToHorizo​​ntalOffset 可能会出现性能问题。

我还尝试了 WP8 中的 LongListSelector,因为我读到它具有更好的 UI 虚拟化,应该使用它来代替 ListBox。问题是我无法让它水平滚动。有可能吗?我尝试将它包装到 ScrollViewer 中,它可以水平滚动并且它可以工作,但前提是我在 LLS 上设置固定宽度。

我还尝试了 Telerik 的 RadDataBoundListBox,问题类似,我无法在同一个列表框中同时获得水平和垂直滚动。所以我只能让每个列表自行滚动。

有人可以告诉我他们是否有类似的情况以及解决此问题的最佳方法是什么?我相信我不是唯一一个有实现大型可滚动表的要求的人。

Thanks

更新: 我只是告诉您,我没有找到实现此目的的正确方法,而是使用 WebBrowser 控件在 HTML 中完成了它。看起来 IE 已经实现了 UI 虚拟化,因此它可以很好地处理大页面。


您的列表框中可能有图像?并且会发生内存不足异常,您可以做两件事:

  1. 使用BackgroundWorker不要一次性加载数据
  2. 在您正在下载的图像的应用程序中拥有一张本地图像,并将其设置为默认图像,当您滚动到向前滚动到大约 50 个值时,将图像 Url 清理到本地,当它返回时,再次给出您想要显示的图像 url。
    因为我用它来滚动大约 20k 值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Windows Phone 上实现可滚动表格 的相关文章

随机推荐