【C#,WPF】WPF实现按住鼠标左键拖动Listview和Listbox列表,内容跟着滚动的效果

Listview和Listbox差不多,这里拿Listview举例。

熟悉wpf的人都知道listview里面包含着一个Scrollviewer,想要实现效果最大的难点在于如何获取Listview里的Scrollviewer。

废话不多说,

第一步,为Listview里的Scrollviewer绑定ScrollChanged的方法,程序初始化运行时会触发这个方法,通过下面代码我们就可以获取到Listview的Scrollviewer对象了。

【xaml】 ScrollViewer.ScrollChanged="Listview_ScrollChanged"

【CS】     

        ScrollViewer scroll;
        private void Listview_ScrollChanged(object sender, ScrollChangedEventArgs e)
        {
            if (scroll == null)
            {
                scroll = e.OriginalSource as ScrollViewer;
            }
        }

第二步,为Listview绑定PreviewMouseLeftButtonDown方法,拖动前要按住鼠标左键不放,这里记录鼠标的初始位置

【xaml】PreviewMouseLeftButtonDown="Listview_MouseLeftButtonDown"

【CS】 

        double lastPointX;
        private void Listview_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            lastPointX = e.GetPosition(this).X;
        }

第三步,为Listview绑定MouseMove方法,计算前后两次坐标的位移量进行Scrollviewer偏移

【xaml】MouseMove="Listview_MouseMove"

【CS】

        double distance;
        private void EquipmentList_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {

                distance = e.GetPosition(this).X - lastPointX;
                scroll.ScrollToHorizontalOffset(scroll.HorizontalOffset-distance);
                lastPointX = e.GetPosition(this).X;
            }
        }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值