Проблема в том, что в самом ListBox есть ScrollViewer, который проглатывает события колеса мыши, прежде чем они смогут добраться до родительского ScrollViewer, содержащего ваш ListBox.
Вам необходимо обработать события колеса мыши предварительного просмотра на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);
}