WPF 的Listbox 滚动处理

2021-06-29 19:04

阅读:306

标签:rtt   gen   nts   选择   ret   border   idt   etc   can   

操作需求场景:Listbox 高150  item 高150 listbox有几十个item ,希望鼠标滚轮滚动一次listbox 能滚动到下一个item,

代码实现:

  

  ui界面代码如上,重点是重写 waterfalllistbox_PreviewMouseWheel 鼠标滚轮事件

  private void waterfalllistbox_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
        {           
            e.Handled = true;
            ScrollViewer obj = VisualHelper.FindChildren(waterfalllistbox).First();
            Debug.WriteLine("ScrollableHeight:" + obj.ScrollableHeight);
            Debug.WriteLine("VerticalOffset:" + obj.VerticalOffset);
            Debug.WriteLine("ContentVerticalOffset:" + obj.ContentVerticalOffset);
            Debug.WriteLine("e.Delta:" + e.Delta);
            if (e.Delta   obj.PageDown();//向下滚动
            }
            else
            {
                obj.PageUp();//
            }             
        }

  注意:item 的高度是150,由于listboxitem 有默认的外边距和内边距,所以listbox 所在的行的高度为158

这样的话 就能在竖向滑动的时候,可以一次滑动一个。

扩展:横向滑动的时候  

ScrollViewer.PageLeft(), PageRight()
Listbox 鼠标滚动的时候默认调用的是
ScrollViewer.LineDown()各个方向的line 方法;
在键盘按住上下箭头的时候默认调用pagedown 等各个方法。

(●‘?‘●) 打赏个包子也很赞奥

   技术分享图片




WPF 的Listbox 滚动处理

标签:rtt   gen   nts   选择   ret   border   idt   etc   can   

原文地址:https://www.cnblogs.com/gisbeginner/p/10005864.html


评论


亲,登录后才可以留言!