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;
}
}