WPF ScrollViewer et événement SizeChanged
-
08-10-2019 - |
Question
Quelqu'un peut-il me expliquer la relation entre ScrollViewer
et événement SizeChanged
? Chaque fois que je mets un ScrollViewer autour d'une grille, de nombreux événements SizeChanged est congédié. Quelle est la relation entre les deux? Merci beaucoup.
EDIT:
Du commentaire de mdm20, je remarque que le ActualWidth et ActualHeight de la grille augmente de façon continue si j'enrouler la grille autour d'un ScrollViewer. Quelqu'un peut-il expliquer pourquoi il en est le cas? Ai-je besoin d'avoir des valeurs dures pour la largeur et la hauteur de la grille?
EDIT # 2:
Le changement de taille se fait par le code affiché ci-dessous. Merci pour la recherche dans ce
private void chartGrid_SizeChanged(object sender, SizeChangedEventArgs e)
{
textCanvas.Width = chartGrid.ActualWidth;
textCanvas.Height = chartGrid.ActualHeight;
legendCanvas.Children.Clear();
chartCanvas.Children.RemoveRange(1, chartCanvas.Children.Count - 1);
textCanvas.Children.RemoveRange(1, textCanvas.Children.Count - 1);
AddChart();
}
correspondant du code XAML est ci-dessous:
<ScrollViewer Name="chartScrollViewer">
<Grid Margin="0" x:Name ="chartGrid" Grid.Column="1" Grid.Row="1" ClipToBounds="True" Background="Transparent" SizeChanged="chartGrid_SizeChanged">
<Canvas Margin="2" Name="textCanvas" ClipToBounds="True" Grid.Column="1" Grid.Row="1" Height="1200">
<Canvas Name="chartCanvas" ClipToBounds="True">
<Canvas Name="legendCanvas" Background="Transparent" />
</Canvas>
</Canvas>
</Grid>
</ScrollViewer>
La solution
Vous obtenez une boucle. Je pense que ce qui se passe est que lorsque vous modifiez la taille de la toile, il invite la grille à faire une passe de mise en page, ce qui provoque la ScrollViewer
de faire une passe de mise en page, ce qui provoque la grille de se redimensionner, qui démarre le cycle recommence.