wpf ScrollViewer和SizeChanged事件

时间:2010-10-15 20:15:10

标签: wpf size scrollviewer actualwidth actualheight

有人可以向我解释ScrollViewerSizeChanged事件之间的关系吗?每当我将scrollViewer放在网格周围时,就会触发大量的SizeChanged事件。两者之间有什么关系?非常感谢。

编辑:

从mdm20的评论中,我注意到如果我将网格包裹在ScrollViewer周围,网格的ActualWidth和ActualHeight会不断增加。任何人都可以解释为什么会这样吗?我是否需要为网格的宽度和高度设置硬值?

编辑#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 个答案:

答案 0 :(得分:1)

你正在进入一个循环。我认为发生的事情是,当您更改画布大小时,它会提示网格执行布局传递,这会导致ScrollViewer执行布局传递,这会导致网格自行调整大小,从而启动循环再一次。