我需要创建一个电视指南的应用程序。要求是UI必须是您可以在此处看到的副本:raspored.bnet.hr。如你所见,这里有大量的数据。所以,基本上它会是一个很大的可滚动的表格。由于Windows Phone上没有table这样的UI控件,我发现最好的方法是创建一个垂直列表框,并将水平列表框作为其项目。这一切都很好,我可以创建它。但是,为了让它表现得像一个表格,我还需要让这些水平列表框同步滚动,而不是一次滚动一行。然后我禁用了水平列表框上的水平滚动,并在父(垂直)列表框上启用了它,虽然它提供了我想要实现的结果,但出现了一个大问题- UI虚拟化。我知道listbox在默认情况下启用了UI虚拟化,我可以在垂直列表框上滚动时看到它,但当我禁用水平列表框上的水平滚动时,性能真的很差,有时还会出现OutOfMemoryException。我理解为什么会发生这种情况,因为当我禁用水平滚动时,这些列表框不再知道屏幕上有哪些项目,所以将它们全部加载到内存中。
我还尝试在每个列表框上保留滚动,以便它们具有UI虚拟化功能,然后将ScrollViewer放在它们上面。然后,我尝试在scrollviewer上监听操作事件,并根据需要按程序滚动所有列表框。这并不能很好地工作,首先,ManipulationDelta事件的触发频率似乎不足以使滚动平滑,而且我认为在大约180个列表框上调用ScrollToHorizontalOffset可能存在性能问题。
我也尝试了WP8的LongListSelector,因为我读到它的UI虚拟化要好得多,应该用它来代替ListBox。这样做的问题是我不能让它水平滚动。这是完全可能的吗?我试着将它包装成可以水平滚动的ScrollViewer,但只有当我在LLS上设置固定宽度时,它才能工作。
我也试过Telerik的RadDataBoundListBox,问题是类似的,我不能在同一列表框中同时显示水平和垂直滚动。所以我只能让每个列表自己滚动。
谁能告诉我,如果他们有类似的情况,解决这个问题的最好方法是什么?我相信我不是唯一一个需要实现大的可滚动表格的人。
谢谢
更新:我只想告诉你,我没有找到一个合适的方法来实现它,相反,我已经用WebBrowser控件在HTML语言中实现了。IE似乎已经实现了UI虚拟化,所以它可以很好地处理大页面。
发布于 2014-02-07 15:13:53
不要一次加载数据,在你正在下载的图片的应用程序中使用BackgroundWorker
因为我用它来滚动20k的值。
https://stackoverflow.com/questions/21502991
复制相似问题