【发布时间】:2011-04-26 03:18:31
【问题描述】:
谁能向我解释ScrollViewer 和SizeChanged 事件之间的关系?每当我在网格周围放置一个 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>
【问题讨论】:
-
它们是在窗口加载时触发还是持续触发?
-
它在加载 Window 时。由于不断调用,我无法通过窗口加载
-
网格里面有什么?您是否在 sizechanged 事件中更改任何内容的大小以创建循环?
-
网格内部是一个画布。我正在将画布的大小更改为网格容器的宽度和高度。但是我不明白为什么在启动过程中会多次调用它。
-
你能发布 XAML 和更改画布大小的代码吗?
标签: wpf size scrollviewer actualwidth actualheight