看看那個孩子安排在元素的左上角這個非常簡單的自定義面板:
public class MyPanel : Panel
{
protected override Size MeasureOverride(Size availableSize)
{
Trace.TraceInformation("MeasureOverride");
var size = new Size();
foreach (UIElement element in InternalChildren)
{
element.Measure(availableSize);
size.Width = Math.Max(size.Width, element.DesiredSize.Width);
size.Height = Math.Max(size.Height, element.DesiredSize.Height);
}
return size;
}
protected override Size ArrangeOverride(Size finalSize)
{
Trace.TraceInformation("ArrangeOverride");
foreach (UIElement element in InternalChildren)
{
element.Arrange(new Rect(element.DesiredSize));
}
return finalSize;
}
}
如果你使用它像一個按鈕孩子
<local:MyPanel>
<local:MyPanel>
<Button Width="100" Height="100" Click="Button_Click"/>
</local:MyPanel>
</local:MyPanel>
和如下圖所示該調整大小按鈕
private void Button_Click(object sender, RoutedEventArgs e)
{
((FrameworkElement)sender).Width += 20;
}
你會發現,在每一個按鈕點擊父母和祖父母面板Button_Click事件處理程序將被測量和安排。跟蹤輸出看起來是這樣的:
CustomPanelTest.vshost.exe Information: 0 : MeasureOverride
CustomPanelTest.vshost.exe Information: 0 : MeasureOverride
CustomPanelTest.vshost.exe Information: 0 : ArrangeOverride
CustomPanelTest.vshost.exe Information: 0 : ArrangeOverride
因此沒有必要調用Measure
或Arrange
手動在父面板。
你不這樣做。它由WPF自動完成。只需嘗試一下。 – Clemens 2013-02-09 20:58:28
以及它沒有自動執行..如果我告訴面板你有200×200的大小,然後我改變一個孩子的寬度爲300,面板不更新..這是我的問我這個問題 – cyberist 2013-02-09 21:28:49
你需要提供更多關於您想要實現的內容以及爲什麼並顯示一些代碼的信息。如果我們被猜測,Stackoverflow的人無法提供幫助。 – 2013-02-09 21:35:20