【问题标题】:wpf ScrollViewer and SizeChanged eventwpf ScrollViewer 和 SizeChanged 事件
【发布时间】:2011-04-26 03:18:31
【问题描述】:

谁能向我解释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>

【问题讨论】:

  • 它们是在窗口加载时触发还是持续触发?
  • 它在加载 Window 时。由于不断调用,我无法通过窗口加载
  • 网格里面有什么?您是否在 sizechanged 事件中更改任何内容的大小以创建循环?
  • 网格内部是一个画布。我正在将画布的大小更改为网格容器的宽度和高度。但是我不明白为什么在启动过程中会多次调用它。
  • 你能发布 XAML 和更改画布大小的代码吗?

标签: wpf size scrollviewer actualwidth actualheight


【解决方案1】:

你进入了一个循环。我认为发生的事情是,当您更改画布大小时,它会提示网格进行布局传递,这会导致 ScrollViewer 进行布局传递,这会导致网格自行调整大小,从而重新开始循环.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 2015-12-16
    • 1970-01-01
    相关资源
    最近更新 更多