2009-09-06 75 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