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]);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM