首页 > 解决方案 > uwp scrollviewer 视口 - 有没有办法知道当前控件是否在视口中并且对用户可见?

问题描述

在 uwp windows 应用程序中。

<ScrollViewer x:Name="filesView_Thumbnail">
<Grid><Image /></Grid>.... long list of Grid or GridView with ItemTemplate
</ScrollViewer>

当我在 scrollViewer 中加载一长串图像时,我想首先加载用户可见的图像,因为加载图像需要时间。

有没有一种方法可以触发事件或计算当前 ViewPort 中当前对用户可见的 Grid 或 Image 控件?

我尝试用宽度和高度进行粗略计算,但是当它出现长列表时它就关闭了。当 Grid 和 Image 控件的大小不同时,这种方法不起作用。

标签: windowsgridviewuwp

解决方案


正如 Raymond Chen 所说,您可以使用 ListView。当您加载一长串图像时,同时为所有图像创建 UI 会浪费资源。因此,您需要根据需要为图像创建 UI。ListView 和 GridView(以及其他标准 ItemsControl 派生控件)为您执行UI 虚拟化。换句话说,对于绑定到多个项目集合的项目控件,当项目接近滚动到视图中(几页之外)时,框架可以为这些项目生成 UI 并缓存它们。

注意ListView内置了scrollviewer,不需要为它添加scrollviewer,否则会影响UI虚拟化。


推荐阅读