如何在ArrangeOverride wpf上重新排列画布的子画面

时间:2017-08-22 06:02:23

标签: wpf canvas scale panel arrangeoverride

我有画布,其中儿童动态添加到画布,假设图像放在左边= 50,顶部50放置画布宽度(500)和高度(200)。当窗口最大化时,画布宽度和高度会发生变化(1000,400),此时需要根据画布宽度和高度重新排列图像位置。根据研究发现,必须实施

  

面板的MeasureOverride和ArrangeOverride方法。

此处用户可以向画布添加任意数量的项目,想要相对于画布大小缩放子项。

如何在上述方法中实现逻辑?

1 个答案:

答案 0 :(得分:1)

您可以在SizeChanged事件的事件处理程序中实现您的逻辑(无论是什么):

private void Canvas_SizeChanged(object sender, SizeChangedEventArgs e)
{
    Canvas canvas = sender as Canvas;
    Size size = e.NewSize;
    foreach (UIElement child in canvas.Children)
    {
        //set the new postion of each element according to your logic
        Canvas.SetLeft(child, );
    }
}
<Canvas x:Name="canvas" Width="500" Height="200" Background="Yellow" SizeChanged="Canvas_SizeChanged">
    <Button Content="..." Canvas.Left="50" Canvas.Top="50" />
</Canvas>

没有理由创建自定义Panel并覆盖MeasureOverrideArrangeOverride方法。