WPF ScrollViewer 当前滚动位置已显示或出现的 Item
这个需求主要出现在一些例如数据曝光,修改浏览状态等使用到 ScrollViewer 内容控件的功能下
我感觉这个需求可能很多人会用到,而且现在很少有这样的案例
我在搜索时完全不知道用什么关键词去搜索这种类型的需求,如果有懂的希望可以留言告诉我
示例代码:
private void Example(List<object> items, ScrollViewer viewer)
{
if(items == null || viewer == null) return;
var expos = new List<object>();
for(var i = 0; i < items.Count; i++)
{
var item = listBox.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem; //根据 index 来获取 ListBox 里的 ListBoxItem
if(item == null) continue;
var location = VisualTreeHelper.GetOffset(item); //使用这个方法可以获取到 ListBoxItem 在视觉树里的 Vector
var itemRect = new Rect(new Point(location.X, location.Y), new Size(item.ActualWidth, item.ActualHeight)); //根据 ListBoxItem 的 Offset 和 Size 创建一个 Rect
var viewerRect = new Rect(new Point(0, 0), new Size(viewer.ViewportWidth, viewer.ViewportHeight)); //根据 ScrollViewer 的 Offset 和 Size 创建一个 Rect
if(!viewerRect.Contains(itemRect)) continue; //判断 ScrollViewer 的 Rect 是否完整的包含了 ListBoxItem 的 Rect,这个方法的判断是需要 ListBoxItem 完全出现在 ScrollViewer 时结果才会为 True,否则为 False
expos.Add(items[i]);
}
}
作者: _蔚蓝
出处:https://www.cnblogs.com/SunsetAzure/p/15161853.html
本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
分类:
WPF
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本