2009-09-06 73 views
0

我有一個名爲ItemsSource的依賴屬性的UserControl。當屬性發生變化時,我需要計算各種元素的大小。爲此,我必須訪問UserControl的ActualWidthActualHeight屬性。如何確保佈局更新已經發生?

是,如果對象是一個佈局更新之前分配給ItemsSource已經發生的問題,ActualWidthActualHeight爲0

我怎樣才能確保佈局更新響應屬性更改事件發生之前,同時還允許在佈局更新發生之前更改屬性?

回答

0

我後來意識到,實際上我並不需要在每次數據源更改時重新生成行和列。相反,我在我的UserControl上處理SizeChanged事件並在那裏執行大小計算。當控件第一次顯示時,事件似乎會觸發,所以它有機會在沒有任何額外努力的情況下進行初始計算。

1

這是你在找什麼 - UpdateLayout()

但是,這是不建議頻繁使用,因爲它會導致佈局通行證上的UIElement定義的函數。

+0

這似乎沒有任何效果。 ActualWidth和ActualHeight仍然爲0. – 2009-09-07 00:28:42

+0

在調用'element.UpdateLayout()'之前,你需要一個'element.Measure(Double.PositiveInfinity,Double.PostiveInfinity)'和一個'element.Arrange(element.DesiredSize)'。 – Dennis 2012-02-25 22:45:21