我有一个GridView
。我正在使用嵌套的ScrollViewer
的SnapPoints
将每个记录捕捉到视图中。因为这只是一个视觉上的变化,而不是数据变化,所以我怎样才能确定哪些记录是当前可见的?类似SelectedItem
,但是是一个可视化查询。我可以检查每个记录,但似乎效率低下。想法?ScrollViewer中可见什么?
回答
你的情况,你可以使用从WinRT的XAML工具包VisualTreeHelperExtensions
,做这样的事情
gridView
.GetDescendantsOfType<GridViewItem>()
.Select(gvi => gridView.ItemFromContainer(gvi));
它确实有点密集的视觉树搜索,但如果你的GridView
使用虚拟化,因为可能是为您的方案确定返回的项目在视图端口中或附近。如果你想更精确,你可以测试边界矩形交点。像这样的东西可能就足够了:
static class RectExtensions
{
public static bool ContainsPartOf(this Rect bigRect, Rect smallRect)
{
// this is a very targeted test for horizontally scrollable smallRects inside of a bigRect
return bigRect.Left < smallRect.Left && bigRect.Right > smallRect.Left ||
bigRect.Left < smallRect.Right && bigRect.Right > smallRect.Right;
}
}
var sv = gridView.GetFirstDescendantOfType<ScrollViewer>();
var bigRect = new Rect(0, 0, sv.ActualWidth, sv.ActualHeight);
gridView
.GetDescendantsOfType<GridViewItem>()
.Where(gvi => bigRect.ContainsPartOf(gvi.GetBoundingRect(sv)))
.Select(gvi => gridView.ItemFromContainer(gvi));
在这种情况下,为什么不使用Items?或者如果你有约束力,可以投射ItemsSource? –
那么,如果你的列表被虚拟化了,那么可视化树中的'GridViewItems'就在视口中或附近,所以它们基本上与“当前可见”几乎相同。如果您需要查看视觉树中的哪些 - 您可以抓住它们的边界矩形并查看它们是否位于视图端口内。 –
我希望它更容易 –
- 1. ScrollViewer可见?
- 2. ScrollViewer中的图像,完全可见&zoomable?
- 3. 我可以使用该scrollviewer做什么?
- 4. 高度为0时ScrollViewer仍然可见
- 5. WPF ScrollViewer控件按钮的可见性
- 6. 为什么jcombobox不可见?
- 7. 为什么GlobalAuthenticationConfigurerAdapter.init()不可见?
- 8. 为什么detailTextLabel不可见
- 9. 为什么是可见的
- 10. 为什么IMetadataExchange不可见?
- 11. 为什么MovieClip不可见?
- 12. 为什么textviews不可见?
- 13. 为什么sun.management.OperatingSystemImpl包可见?
- 14. WPF - 决定哪个是可见的画布ScrollViewer中
- 15. ScrollViewer中的ScrollViewer
- 16. matlab:如何设置动态不可见什么是可见的
- 17. 在ScrollViewer的滚动条可见性(WPF)上触发
- 18. 当ScrollBar可见时,WPF ScrollViewer显示边框
- 19. 设置scrollviewer的垂直滚动条是可见的
- 20. Silverlight scrollviewer的滚动条在不活动时不可见
- 21. 如何在使用ScrollViewer时使滚动条可见?
- 22. 如何将wpf datagrid scrollviewer visiblity绑定到按钮可见性?
- 23. WPF Scrollviewer当ScrollBar可见时,DesiredSize不会增加
- 24. 为什么我的JavaFX PathTransition不可见?
- 25. 为什么这部分html不可见?
- 26. 为什么这个窗口不可见?
- 27. 为什么内联块不“可见”?
- 28. 什么是(#210)用户不可见
- 29. 为什么这个JPanel不可见?
- 30. 为什么这些标签不可见
你需要什么东西是真正可见的,还是足以让东西虚拟化(当前有'GridViewItems')? –
有趣的是 - 我今天实际上需要同样的功能(今晚)。我可能会使用扩展方法... –
您是否找到了解决方法? –