PreviewMouseWheel 事件没有传递到封闭的 ScrollViewer

PreviewMouseWheel event not passing up to enclosing ScrollViewer

在我的 WPF 应用程序中,我在 ScrollViewer 中有一个 DataGrid。

只要鼠标悬停在滚动条上,鼠标滚轮就会正确地使 ScrollViewer 滚动。但是,一旦鼠标移到包含的 DataGrid 上,鼠标滚轮就会停止,从而导致 ScrollViewer 滚动。

我原以为事件会自动向上传递到树,直到一个对象处理它们,但如果是这样,为什么 ScrollViewer 不自己处理 PreviewMouseWheel 事件?

    <Grid Grid.Row="1">
        <ScrollViewer VerticalScrollBarVisibility="Auto" Height="200">
            <DataGrid SelectionMode="Single" IsReadOnly="True"
                      AlternationCount="2" AlternatingRowBackground="#FFC2CBFF"
                ItemsSource="{Binding Source={StaticResource SearchResults}}" />
        </ScrollViewer>
    </Grid>

目前我无法对其进行测试,但我认为这会有所帮助。

    private void Grid_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
    {

        e.Handled = false;
    }

设置 e.Handled = false 应该可以解决问题,因为它会将事件传递给 FrameworkElement.Parent

到底为什么不使用 DataGridScrollViewer。为什么还要再绕一个。

<DataGrid ScrollViewer.VerticalScrollBarVisibility="Auto" />

我想你明白了!