windows - 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 控件的大小不同时,这种方法不起作用。
解决方案
正如 Raymond Chen 所说,您可以使用 ListView。当您加载一长串图像时,同时为所有图像创建 UI 会浪费资源。因此,您需要根据需要为图像创建 UI。ListView 和 GridView(以及其他标准 ItemsControl 派生控件)为您执行UI 虚拟化。换句话说,对于绑定到多个项目集合的项目控件,当项目接近滚动到视图中(几页之外)时,框架可以为这些项目生成 UI 并缓存它们。
注意ListView内置了scrollviewer,不需要为它添加scrollviewer,否则会影响UI虚拟化。
推荐阅读
- java - 在遗传算法中定义适应度函数
- postgresql - 无法为 Cloud SQL 代理规则运行部署配置
- java - 列的处理无一例外地存在
- python - 如何将 LabelBinarizer 列添加到 DataFrame
- spring - Spring Data JPA JpaRepository 仅使用 No Arg 构造函数
- c# - 在 NuGet 安装时将文件复制到 Android 项目
- ruby-on-rails-4 - 下一个/上一个按钮可在对象中来回切换
- javascript - 纽曼测试失败。(JSON.parse 语法错误)
- python - 引用没有绝对路径的文件夹
- haskell - 在haskell中搜索序列是否比向量快?