我有畫布,其中的子項被動態地添加到畫布上,可以說當圖片寬度(500)和高度(200)位於左側= 50時,頂部爲50。當窗口最大化時,畫布寬度和高度會發生變化(1000,400),此時需要根據畫布寬度和高度重新排列圖像位置。根據研究發現,必須實施如何在ArrangeOverride上重新排列畫布的子項wpf
面板的MeasureOverride和ArrangeOverride方法。
在這裏,用戶可以添加任意數量的項目到畫布上,想要相對於畫布尺寸縮放孩子。
如何在上述方法中實現邏輯?
我有畫布,其中的子項被動態地添加到畫布上,可以說當圖片寬度(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