如何在ArrangeOverride上重新排列画布的子项wpf
问题描述:
我有画布,其中的子项被动态地添加到画布上,可以说当图片宽度(500)和高度(200)位于左侧= 50时,顶部为50。当窗口最大化时,画布宽度和高度会发生变化(1000,400),此时需要根据画布宽度和高度重新排列图像位置。根据研究发现,必须实施如何在ArrangeOverride上重新排列画布的子项wpf
面板的MeasureOverride和ArrangeOverride方法。
在这里,用户可以添加任意数量的项目到画布上,想要相对于画布尺寸缩放孩子。
如何在上述方法中实现逻辑?
答
你可以在你实现你的逻辑(无论是)在事件处理程序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
和覆盖MeasureOverride
和ArrangeOverride
方法。
“必须执行MeasureOverride和ArrangeOverride”。这对于派生的面板来说是对的,但对Canvas来说则不然。只需重新计算并设置子元素的Left和Top。或者使用其他更合适的布局面板,如Grid或DockPanel。 – Clemens
上午使用从画布派生的自定义画布。 – GANI
for downvote,请添加评论 – GANI