C# 滚动条移动时停止刷新列表框
是否可以在滚动时停止刷新列表框内容,并仅在释放鼠标左键后才进行刷新?您需要配置C# 滚动条移动时停止刷新列表框,c#,wpf,listbox,scrollview,scrollbar,C#,Wpf,Listbox,Scrollview,Scrollbar,是否可以在滚动时停止刷新列表框内容,并仅在释放鼠标左键后才进行刷新?您需要配置ListBox的ScrollViewer,通过设置附加属性来延迟内容呈现: 请注意,ScrollViewer.ScrollChanged在每次索引更改时或IsDeferredScrolling=True仅在释放滚动条并滚动完成后才会出现。请参见此。TL;DR-使用列表视图,而不是列表框。有效,谢谢。在这样的滚动过程中,是否可以轻松提取第一个“可见”元素的索引?我以前使用过,但现在它返回了一些不同的内容。我更新了我的答案
ListBox
的ScrollViewer
,通过设置附加属性来延迟内容呈现:
请注意,
ScrollViewer.ScrollChanged
在每次索引更改时或IsDeferredScrolling=True
仅在释放滚动条并滚动完成后才会出现。请参见此。TL;DR-使用列表视图
,而不是列表框
。有效,谢谢。在这样的滚动过程中,是否可以轻松提取第一个“可见”元素的索引?我以前使用过,但现在它返回了一些不同的内容。我更新了我的答案,以显示如何获取第一个可见项。如果这对你不起作用,请告诉我。在这种情况下,还请告诉我有关列表框的任何特殊配置,例如禁用的虚拟化。我有一个简单的滚动条气球,上面有列表中第一项的索引。设置ScrollViewer.IsDeferredScrollingEnabled=“True”
时,仅在释放键时才获得值。我没有多余的装备。大文件将被加载,所以我想关闭内容刷新,因为它会严重冻结应用程序,同时知道我当前正在滚动哪个索引。此控制是否可能?是的,可能。但是当使用延迟滚动时,这会变得更加复杂。在执行此操作之前,我们应该确保正确使用内置性能特性以充分发挥作用。默认情况下,ListBox
或ListView
使用UI虚拟化。仅当渲染需要时才加载项容器。仅装载固定数量的容器,即一次生成。现在的目标是确保使用UI虚拟化并最大化渲染速度。我们想禁用延迟滚动,但仍然可以平滑滚动!请检查:1)您没有将CanContentScroll
设置为false
2)您没有将IsVirtualization
设置为false
3)您仅使用数据绑定将数据添加到ItemsSource
4)源集合中只包含一种数据类型,并且只定义了一个DataTemplate
布局项目容器——如果任何一点可以用false回答,那么虚拟化将被隐式禁用。
<ListBox ScrollViewer.IsDeferredScrolling="True" />
<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];
}