Событие wpf ScrollViewer и SizeChanged

Может ли кто-нибудь объяснить мне отношения между ScrollViewer а также SizeChanged событие? Всякий раз, когда я помещаю scrollViewer вокруг сетки, происходит большое событие SizeChanged. Какая связь между ними? Большое спасибо.

РЕДАКТИРОВАТЬ:

Из комментария mdm20 я заметил, что ActualWidth и ActualHeight сетки постоянно увеличиваются, если я обертываю сетку вокруг ScrollViewer. Кто-нибудь может объяснить, почему это так? Нужно ли иметь жесткие значения для ширины и высоты сетки?

РЕДАКТИРОВАТЬ № 2:

Изменение размера выполняется с помощью кода, размещенного ниже. Спасибо за просмотр этого

    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();
    }

Соответствующий код XAML ниже:

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

1 ответ

Решение

Вы попадаете в петлю. Я думаю, что происходит, когда вы изменяете размер холста, он заставляет сетку выполнить этап макета, который вызывает ScrollViewer сделать проход макета, который заставляет сетку изменять размер сам, который начинает цикл снова.

Другие вопросы по тегам