我有一个带有垂直滚动条的外部列表框,在每个项目上我都有一个可能有水平滚动条的滚动查看器。问题是,当我使用鼠标时,事件不会到达外部列表框,因此滚动不起作用。我已经在scrollviewers上设置了Focusable = false,但这只是阻止它们处理键盘事件,而不是鼠标事件。如何阻止内部滚动查看器捕获鼠标滚轮事件并允许它冒泡到外部列表框?
答案 0 :(得分:1)
你可能会发现一些很好的例子here。它描述了如何在ItemsControl
答案 1 :(得分:1)
问题是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);
}