WPF 使用鼠标滚轮控制ListBox水平滚动条滚动
2013-09-06 13:24
579 查看
我们都知道在WPF中鼠标滚轮可以控制垂直滚动条滚动,但没有什么属性设置可以让它控制水平滚动条滚动,所以我们需要自己去实现水平滚动。
首先,在ListBox的Mousewheel事件中获得ListBox的滚动条,我发现MouseWheel事件不能被触发,所以我们要这样添加事件:
然后我们需要写一个方法获得LisBox的ScrollViewer:
在MouseWheel中写:
其中,根据鼠标滚轮的变量值可以获得鼠标滚轮的滚动方向,根据滚动方向设置滚动条的滚动方向。
由于默认情况下垂直滚动条由鼠标滚轮控制,所以我们可以让垂直滚动条一直在最上方,然后隐藏垂直滚动条,就可以实现我们想要的效果!
首先,在ListBox的Mousewheel事件中获得ListBox的滚动条,我发现MouseWheel事件不能被触发,所以我们要这样添加事件:
list.AddHandler(ListBox.MouseWheelEvent, new MouseWheelEventHandler(list_MouseWheel), true);
然后我们需要写一个方法获得LisBox的ScrollViewer:
public static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject { if (obj != null) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child != null && child is T) { return (T)child; } T childItem = FindVisualChild<T>(child); if (childItem != null) return childItem; } } return null; }
在MouseWheel中写:
private void list_MouseWheel(object sender, MouseWheelEventArgs e) { ItemsControl items = (ItemsControl)sender; ScrollViewer scroll = FindVisualChild<ScrollViewer>(items); if (scroll != null) { int d = e.Delta; if (d > 0) { scroll.LineRight(); } if (d < 0) { scroll.LineLeft(); } scroll.ScrollToTop(); } }
其中,根据鼠标滚轮的变量值可以获得鼠标滚轮的滚动方向,根据滚动方向设置滚动条的滚动方向。
由于默认情况下垂直滚动条由鼠标滚轮控制,所以我们可以让垂直滚动条一直在最上方,然后隐藏垂直滚动条,就可以实现我们想要的效果!
相关文章推荐
- vc++ 添加可以滚动整个窗口的滚动条(水平和竖直)并可使用鼠标滚动轮和键盘上的上下键控制滚动条
- Wpf ScrollViewer with WrapPanel 使用鼠标滚轮水平滚动内容
- WPF中关于自定义控件的滚动条鼠标停留在内容上鼠标滚轮滚动无效的问题
- MFC CListCtrl控件隐藏滚动条但是保留用鼠标滚轮滚动效果的方法
- 怎样隐藏滚动条还能滚动页面(包括鼠标滚轮)?
- 鼠标滚轮控制panel滚动条
- 如何更改windows鼠标滚轮的方向,按滚动条,按手指(触摸屏操作模式),跟mac一样,以win7为例,在windows中使用mac鼠标模式
- 用鼠标滚轮控制窗口上下滚动(原创)
- 鼠标滚轮滚动控制页面显示和页面动画
- WinForm中重绘滚动条以及用重绘的滚动条控制ListBox的滚动
- Delphi中的DBGrid如何实现使用鼠标滚轮上下滚动
- 鼠标滑轮控制Div水平滚动
- 自定义滚动条(键盘,滚轮,鼠标,三种控制方式)
- 鼠标滚轮控制panel滚动条
- C# panel控件实现鼠标滚轮滚动拖动滚动条
- 鼠标滚轮 控制作用滚动
- 鼠标滚轮控制panel滚动条
- WPF下Listbox水平排列并平滑滚动
- 鼠标滚轮控制panel滚动条
- 更改windows7鼠标滚轮的方向,按滚动条,按手指(触摸屏操作模式),跟mac一样,在windows中使用mac鼠标模式