2016-02-09 64 views
0

我有一個ListView控件正在渲染一個UserControl。我希望能夠分辨出當前視圖中顯示哪些項目,即當前視圖中顯示給用戶的所有內容。在ListView中檢測ListViewItem的位置

作爲一個例子:

 _______________ 
     |    | 
|1| |2| | |3| |4| |5| | |6| |7| 
     |_____________| 

在這裏我想知道3,4和5被呈現給用戶,並且,1,2,6和7是在可見區域之外。

如何做到這一點?

回答

1

伸出設置ScrollViewerCanContentScrollTrue的附加屬性在ListView,以確保該ScrollViewer物理單元爲單位滾動不符合邏輯的人(有在ListView視見例如顯示沒有半項),然後處理ScrollChanged事件獲得單元的每個時間偏移:

<ListView ScrollViewer.CanContentScroll="True" x:Name="Lv" ScrollViewer.ScrollChanged="Lv_OnScrollChanged" Height="100"> 

     <ListBoxItem Height="50" 
       Content="Item 1" /> 
     <ListBoxItem Height="50" 
       Content="Item 2" /> 
     <ListBoxItem Height="50" 
       Content="Item 3" /> 
     <ListBoxItem Height="50" 
       Content="Item 4" /> 
     <ListBoxItem Height="50" 
       Content="Item 5" /> 
     <ListBoxItem Height="50" 
       Content="Item 6" /> 
     <ListBoxItem Height="50" 
       Content="Item 7" /> 

    </ListView> 

確保ListView高度(或寬度,如果你想使用水平的ListView)必須是一個ListViewItem高度的乘數(以上* 100 = x * 50,x∈* *)。

private void Lv_OnScrollChanged(object sender, ScrollChangedEventArgs e) 
    { 
     var verticalOffet=e.VerticalOffset; 
     //the visible items are the items number from verticalOffet until verticalOffet+(ListView Heigh/ListViewItem Height) 
    } 

例如,如果事件被觸發,verticalOffet是,然後在ListView視口中可見的項目有3項:

可見ListViewItems是從事件處理程序的VerticalOffset推導,第4項。