有两种通用方法可以做到这一点。首先是获取GridViewItem's AutomationPeer,它实际上有一个直接调用的方法。类信息在这里。我在让它真正可用时遇到了问题。幸运的是,还有第二个答案。这需要做一些数学运算,但这是可行的。
GridViewItem使用GridView's获取项目容器,在本例中为 a ItemContainerGenerator。
- 获取.
GridView_ ScrollViewer你可以搜索FindVisualChild<T>方法,周围有很多。
- 执行
MyGridViewItem.TransformToVisual(MyGridViewScrollViewer).TransformPoint(new Point(0, 0));此操作将使您获得项目的左上角,相对于整个可滚动面板(称为它的Extent)ScrollViewer(这将在稍后很重要)。
这将返回给您一个Point对象。
接下来,我们需要找出X当前显示在ScrollViewer.
注意:如果您使用的是 Vertical scrolling ScrollViewer,请使用Heights. 水平,使用Widths。两者都用。我将使用水平/宽度来做我的例子。
- 采取
HorizontalOffset. 这是当前可视区域的当前“下限”。
- 取
HorizontalOffset加号ViewportWidth。这是当前可视区域的上限。
- 如果您
Point.X大于您的下限且小于您的上限,则该项目是可见的。
如果您还需要确定整个项目是否可见,请对 . 进行相同的计算Point.X + GridViewItem.Width。
希望这会有所帮助,并祝您编码愉快!