检测 ListView 中 ListViewItem 的位置
Detect position of a ListViewItem in ListView
我有一个在其中呈现 UserControl 的 ListView 控件。我想知道当前视图中显示了哪些项目,即当前视图中向用户显示的所有内容。
举个例子:
_______________
| |
|1| |2| | |3| |4| |5| | |6| |7|
|_____________|
在这里我想知道 3、4 和 5 呈现给用户,而 1、2、6 和 7 在可见区域之外。
如何做到这一点?
Juts 将 ScrollViewer
CanContentScroll
的附加 属性 设置为 ListView
中的 True
,以确保 ScrollViewer
根据物理单位而不是逻辑单位滚动(例如 ListView
ViewPort 中没有显示一半的项目),然后每次处理 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 ∈ ℕ*) .
可见的ListViewItems
是从事件处理程序中的VerticalOffset
推导出来的:
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 为 2,则 ListView
ViewPort 中的可见项目为项目 3 和项目 4。
我有一个在其中呈现 UserControl 的 ListView 控件。我想知道当前视图中显示了哪些项目,即当前视图中向用户显示的所有内容。
举个例子:
_______________
| |
|1| |2| | |3| |4| |5| | |6| |7|
|_____________|
在这里我想知道 3、4 和 5 呈现给用户,而 1、2、6 和 7 在可见区域之外。
如何做到这一点?
Juts 将 ScrollViewer
CanContentScroll
的附加 属性 设置为 ListView
中的 True
,以确保 ScrollViewer
根据物理单位而不是逻辑单位滚动(例如 ListView
ViewPort 中没有显示一半的项目),然后每次处理 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 ∈ ℕ*) .
可见的ListViewItems
是从事件处理程序中的VerticalOffset
推导出来的:
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 为 2,则 ListView
ViewPort 中的可见项目为项目 3 和项目 4。