滚动条移动时停止刷新列表框
Stop refresh listBox when scrollbar is moving
是否可以在松开鼠标左键后才停止滚动刷新ListBox内容?
您需要通过设置附加的 属性 ScrollViewer.IsDeferredScrolling
:
来配置 ListBox
的 ScrollViewer
以延迟内容呈现
<ListBox ScrollViewer.IsDeferredScrolling="True" />
以下示例仅在ScrollViewer.CanContentScroll=true
时有效。如果 ScrollViewer.CanContentScroll=false
,那么 ScrollViewer.VerticalOffset
将不会 return 项目索引,而是项目的位置偏移量(以像素为单位)。在这种情况下,您必须根据项目位置找到第一个可见项目。
在 ScrollViewer.ScrollChanged
事件中获取第一个可见项的示例,当 ScrollViewer.CanContentScroll=true
时(默认为 ListBox
或 ListView
):
<ListBox ScrollViewer.IsDeferredScrolling="True"
ScrollViewer.ScrollChanged="OnScrollChanged" />
private void OnScrollChanged(object sender, ScrollChangedEventArgs e)
{
var listBox = sender as System.Windows.Controls.ListBox;
var firstVisibleItem = listBox.Items[(int) e.VerticalOffset];
}
请注意,ScrollViewer.ScrollChanged
在每次索引更改时或 IsDeferredScrolling=True
仅在释放滚动条并完成滚动后引发。
是否可以在松开鼠标左键后才停止滚动刷新ListBox内容?
您需要通过设置附加的 属性 ScrollViewer.IsDeferredScrolling
:
ListBox
的 ScrollViewer
以延迟内容呈现
<ListBox ScrollViewer.IsDeferredScrolling="True" />
以下示例仅在ScrollViewer.CanContentScroll=true
时有效。如果 ScrollViewer.CanContentScroll=false
,那么 ScrollViewer.VerticalOffset
将不会 return 项目索引,而是项目的位置偏移量(以像素为单位)。在这种情况下,您必须根据项目位置找到第一个可见项目。
在 ScrollViewer.ScrollChanged
事件中获取第一个可见项的示例,当 ScrollViewer.CanContentScroll=true
时(默认为 ListBox
或 ListView
):
<ListBox ScrollViewer.IsDeferredScrolling="True"
ScrollViewer.ScrollChanged="OnScrollChanged" />
private void OnScrollChanged(object sender, ScrollChangedEventArgs e)
{
var listBox = sender as System.Windows.Controls.ListBox;
var firstVisibleItem = listBox.Items[(int) e.VerticalOffset];
}
请注意,ScrollViewer.ScrollChanged
在每次索引更改时或 IsDeferredScrolling=True
仅在释放滚动条并完成滚动后引发。