我有一个带有垂直滚动条的外部列表框,在每个项目上我都有一个可能有水平滚动条的滚动查看器。问题是当我使用鼠标时,事件不会到达外部列表框,因此滚动不起作用。我已经在滚动查看器上设置了Focusable=false,但这只是阻止它们处理键盘事件,而不是鼠标事件。如何阻止内部滚动查看器捕获鼠标滚轮事件,并允许它冒泡到外部列表框?
发布于 2012-02-11 11:19:17
您可能会在here中找到一些很好的示例。它描述了如何在ItemsControl中禁用鼠标滚轮
发布于 2017-10-26 16:27:55
问题是ListBox本身有一个ScrollViewer,它会在鼠标滚轮事件到达包含您的ListBox的父ScrollViewer之前将它们吞噬掉。
您需要处理ListBox上的预览鼠标滚轮事件,从而防止它们进一步向下传输,同时向父ScrollViewer引发冒泡事件。
这对我很有效:
private void ListBoxThatNowScrolls_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
e.Handled = true;
var e2 = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
e2.RoutedEvent = ListBox.MouseWheelEvent;
e2.Source = e.Source;
ListBoxThatNowScrolls.RaiseEvent(e2);
}https://stackoverflow.com/questions/9019304
复制相似问题