您的位置:首页 > 其它

WPF 使用鼠标滚轮控制ListBox水平滚动条滚动

2013-09-06 13:24 579 查看
我们都知道在WPF中鼠标滚轮可以控制垂直滚动条滚动,但没有什么属性设置可以让它控制水平滚动条滚动,所以我们需要自己去实现水平滚动。

首先,在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();
}
}


其中,根据鼠标滚轮的变量值可以获得鼠标滚轮的滚动方向,根据滚动方向设置滚动条的滚动方向。

由于默认情况下垂直滚动条由鼠标滚轮控制,所以我们可以让垂直滚动条一直在最上方,然后隐藏垂直滚动条,就可以实现我们想要的效果!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: