событие wpf ScrollViewer и SizeChanged - PullRequest
0 голосов
/ 16 октября 2010

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

EDIT:

Из комментария 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 Ответ

1 голос
/ 16 октября 2010

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

...