2017-07-01 47 views
0

在我的WPF應用程序中,我有一個ScrollViewer內的DataGrid。PreviewMouseWheel事件不過去包含ScrollViewer

只要鼠標懸停在滾動條上,鼠標滾輪就會正確地使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> 

回答

2

我目前沒有可能測試它,但我認爲這會有所幫助。

private void Grid_PreviewMouseWheel(object sender, MouseWheelEventArgs e) 
    { 

     e.Handled = false; 
    } 

e.Handled = false應該做的伎倆,因爲它會傳遞事件到FrameworkElement.Parent

最後爲什麼不使用DataGridScrollViewer。爲什麼甚至包裹另一個。

<DataGrid ScrollViewer.VerticalScrollBarVisibility="Auto" /> 

我想你明白了!

+0

主要是因爲我通過反覆試驗瞭解WPF而不是結構化程序,所以我不知道DataGrid包含ScrollViewer! –