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

时间:2017-07-01 17:16:19

标签: wpf events mousewheel

在我的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>

1 个答案:

答案 0 :(得分:2)

我目前无法测试它,但我认为这会有所帮助。

    private void Grid_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
    {

        e.Handled = false;
    }

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

最后,为什么不使用ScrollViewer的{​​{1}}。为什么甚至包裹另一个。

DataGrid

我想你明白了!