我正在處理具有自定義面板和自定義面板內部的自定義控件我有一個小而簡單的MeasureOverride
方法,該方法將double.PositiveInfinity
的大小傳遞給其子MeasureOverride
方法。自定義面板應該注意佈局,它應該根據窗口大小讓孩子變大或變小。使用double.PositiveInfinity測量控件WPF
如果你已經處理了控件,那麼你應該知道wpf佈局系統是如何工作的,並且基本上每個小孩都調用MeasureOverride來調用childs children的MeasureOverride等等。
現在的問題是,當我調整窗口的大小,自定義面板並獲得接收到的標誌做的措施再次因此MeasureOverride
不會再次調用,但這次在經過double.PositiveInfitinty
大小的孩子,孩子MeasureOverride
根本不會被調用(但是應該根據WPF佈局系統的定義調用該方法)。爲什麼?我一直認爲,當我給父母打電話MeasureOverride
時,孩子也會被迫做這個測量。
很明顯,我錯了,所以有人可以解釋我如何控制/孩子知道什麼時候再次測量?
順便說一句,我將double.PositiveInfinity
的大小傳遞給孩子,告訴他們需要儘可能多的空間。
代碼:
protected override Size MeasureOverride(Size availableSize)
{
double x;
double y;
var children = this.InternalChildren;
for (int i = 0; i < children.Count; i++)
{
UIElement child = children[i];
child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity);
y += child.DesiredSize.Height;
x = Math.Max(x, child.DesiredSize.Width);
}
return new Size(x, y);
}
代碼很簡單。我不明白爲什麼孩子們不能再次測量。抱歉,如果我在代碼中拼寫錯了。
請向我們展示您的自定義面板的'MeasureOverride'方法的代碼。 – 2013-02-08 15:20:08
我發佈了代碼。 – cyberist 2013-02-08 15:30:52