Ответ, на который вы ссылались, это именно то, что вызывает вашу проблему, ListBox (который состоит, среди прочего, из ScrollViewer) внутри вашего ScrollViewer перехватывает событие MouseWheel и обрабатывает его, предотвращая его всплывание, и, следовательно, ScrollViewer Идея, что событие когда-либо произошло.
Используйте следующий чрезвычайно простой ControlTemplate для вашего ListBox для демонстрации (обратите внимание, что в нем нет ScrollViewer, и поэтому событие MouseWheel не будет перехвачено) ScrollViewer все еще будет прокручиваться с помощью мыши над ListBox.
<UserControl.Resources>
<ControlTemplate x:Key="NoScroll">
<ItemsPresenter></ItemsPresenter>
</ControlTemplate>
</UserControl.Resources>
<ScrollViewer>
<SomeContainerControl>
<.... what ever other controls are inside your ScrollViewer>
<ListBox Template="{StaticResource NoScroll}"></ListBox>
<SomeContainerControl>
</ScrollViewer>
У вас есть возможность захвата мыши, когда она входит в ScrollViewer, хотя она продолжает получать все события мыши до тех пор, пока мышь не будет отпущена, однако эта опция потребует от вас добавления любых дальнейших событий мыши к элементам управления, содержащимся в ScrollViewer, если вы хотите получить ответ ... будет достаточно следующих обработчиков событий MouseEnter MouseLeave.
private void ScrollViewerMouseEnter(object sender, MouseEventArgs e)
{
((ScrollViewer)sender).CaptureMouse();
}
private void ScrollViewerMouseLeave(object sender, MouseEventArgs e)
{
((ScrollViewer)sender).ReleaseMouseCapture();
}
Однако ни один из предложенных мной обходных путей не является предпочтительным, и я бы посоветовал переосмыслить то, что вы на самом деле пытаетесь сделать. Если вы объясните, что вы пытаетесь достичь в своем вопросе, я уверен, что вы получите еще несколько предложений ...