在Windows Phone上实现可滚动表

时间:2014-02-01 20:08:18

标签: c# xaml windows-phone-7 windows-phone-8 listbox

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

我还尝试了在每个列表框上保留滚动条,以便它们具有UI虚拟化,然后将ScrollViewer放在它们上面。然后我尝试在scrollviewer上听操作事件,并根据需要按原样滚动所有列表框。这样做效果不好,首先ManipulationDelta事件似乎没有频繁发生以使滚动变得平滑,我认为在~180列表框上调用ScrollToHorizo​​ntalOffset可能会出现性能问题。

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

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

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

由于

更新: 我只是告诉你我没有找到一种正确的方法来实现它,而是用HTMLB和WebBrowser控件完成它。似乎IE已经实现了UI虚拟化,因此它可以很好地处理大页面。

1 个答案:

答案 0 :(得分:0)

可能在你的列表框中有图片吗?并且内存不足Execption将会发生两件事:

  1. 不要一次性加载数据使用BackgroundWorker
  2. 在正在下载的图像的App中有一个本地图像,并将其设置为默认图像&当您向前滚动到大约50个值时,将图像Url清除到本地,当它返回时再次给出您想要显示的图像URL。
    因为我用它来滚动大约20k的值。