The problem is that the ListBox itself has a ScrollViewer that absorbs mouse wheel events before they can get to the parent ScrollViewer that contains your ListBox.
You need to handle the mouse preview events in the ListBox and thus prevent them from tunneling down, at the same time, raise the bubbling event to the parent ScrollViewer.
This worked for me:
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); }
source share