2017-08-22 26 views
-1

我有画布,其中的子项被动态地添加到画布上,可以说当图片宽度(500)和高度(200)位于左侧= 50时,顶部为50。当窗口最大化时,画布宽度和高度会发生变化(1000,400),此时需要根据画布宽度和高度重新排列图像位置。根据研究发现,必须实施如何在ArrangeOverride上重新排列画布的子项wpf

面板的MeasureOverride和ArrangeOverride方法。

在这里,用户可以添加任意数量的项目到画布上,想要相对于画布尺寸缩放孩子。

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

+0

“必须执行MeasureOverride和ArrangeOverride”。这对于派生的面板来说是对的,但对Canvas来说则不然。只需重新计算并设置子元素的Left和Top。或者使用其他更合适的布局面板,如Grid或DockPanel。 – Clemens

+0

上午使用从画布派生的自定义画布。 – GANI

+0

for downvote,请添加评论 – GANI

回答

0

你可以在你实现你的逻辑(无论是)在事件处理程序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方法。

+0

如何根据新的画布大小计算新的左边和顶部?所有的控件都是动态添加的。 – GANI

+0

我应该怎么知道?它是*你的*逻辑。 – mm8

+0

它不是我的逻辑,基于这个问题,当画布大小增加时,如何根据新的画布宽度找到新的左边?当画布宽度为(500)时,当画布宽度增加时,将控件放置在左侧50,并根据新宽度设置左侧(左侧值应增加) – GANI