zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    swift 初见-4运算符与字符串操作
    IOS中数据持久化1-CoreData
    swift 初见-3
    swift 初见-2
    系统硬件1-短信,打电话
    swift 初见-1
    socket理解流程图
    文件操作方法fscanf
    Prim模板
    树剖求LCA模板
  • 原文地址:https://www.cnblogs.com/SunsetAzure/p/15161853.html
Copyright © 2011-2022 走看看