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
。
到底为什么不使用 DataGrid
的 ScrollViewer
。为什么还要再绕一个。
<DataGrid ScrollViewer.VerticalScrollBarVisibility="Auto" />
我想你明白了!
在我的 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
。
到底为什么不使用 DataGrid
的 ScrollViewer
。为什么还要再绕一个。
<DataGrid ScrollViewer.VerticalScrollBarVisibility="Auto" />
我想你明白了!