WPF ListBox get current rendered index via ScrollViewer.ScrollChanged
<ListBox x:Name="lbx" ItemsSource="{Binding ImgsList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" SelectedIndex="{Binding SelectedIdx,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" ScrollViewer.ScrollChanged="lbx_ScrollChanged"> <behavior:Interaction.Triggers> <behavior:EventTrigger EventName="SelectionChanged"> <behavior:InvokeCommandAction Command="{Binding SelectionChangedCommand}" CommandParameter="{Binding ElementName=lbx}"/> </behavior:EventTrigger> </behavior:Interaction.Triggers> <ListBox.ItemTemplate> <DataTemplate> <Image Source="{Binding Path=DataContext,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}}}" Width="{Binding ActualWidth,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" Height="{Binding ActualHeight,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
private ScrollViewer GetScrollViewer(DependencyObject dobj) { if (dobj is ScrollViewer) { return dobj as ScrollViewer; } for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dobj); i++) { var child = VisualTreeHelper.GetChild(dobj, i); var result = GetScrollViewer(child); if (result != null) { return result; } } return null; } private void lbx_ScrollChanged(object sender, ScrollChangedEventArgs e) { ListBox listBox = sender as ListBox; if (listBox != null) { ScrollViewer scrollViewer = GetScrollViewer(listBox); if (scrollViewer != null) { int newIdx = (int)(scrollViewer.VerticalOffset / 3); if (newIdx != prevIdx) { Console.WriteLine($"prevIdx:{prevIdx} idx: {newIdx}"); prevIdx = newIdx; Title = newIdx.ToString(); } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2021-03-02 C# 8 using declarations