2017-08-22 27 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