2017-07-01 3 views
0

Dans mon application WPF, j'ai un DataGrid à l'intérieur d'un ScrollViewer.L'événement PreviewMouseWheel ne passe pas à l'inclusion de ScrollViewer

La molette de la souris permet au ScrollViewer de défiler correctement tant que la souris survole la barre de défilement. Cependant, une fois que la souris se déplace sur le DataGrid inclus, la roulette de la souris s'arrête et fait défiler le ScrollViewer.

Je pensais que les événements étaient automatiquement passés dans l'arborescence jusqu'à ce qu'un objet les gère, mais si tel est le cas, pourquoi ScrollViewer ne gère pas l'événement PreviewMouseWheel par lui-même?

<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> 

Répondre

2

Je n'ai pas la possibilité pour le moment de le tester, mais je pense que cela aidera.

private void Grid_PreviewMouseWheel(object sender, MouseWheelEventArgs e) 
    { 

     e.Handled = false; 
    } 

Set e.Handled = false devrait faire l'affaire, car il passera l'événement au FrameworkElement.Parent. À la fin pourquoi ne pas utiliser le ScrollViewer de votre DataGrid? Pourquoi même envelopper un autre autour.

<DataGrid ScrollViewer.VerticalScrollBarVisibility="Auto" /> 

Je pense que vous avez l'idée!

+0

Principalement parce que j'ai appris WPF par essais et erreurs plutôt qu'un programme structuré, donc je ne savais pas que DataGrid incluait un ScrollViewer! –