2009-09-06 6 views
0

У меня есть UserControl с зависимым свойством, называемым ItemsSource. Когда свойство изменено, мне нужно рассчитать размер различных элементов. Для этого мне необходимо получить доступ к свойствам ActualWidth и ActualHeight UserControl.Как обеспечить обновление макета?

Проблема, если объект присваивается ItemsSource перед обновлением макета произошло, ActualWidth и ActualHeight равны 0.

Как я могу гарантировать, что обновление макета происходит, прежде чем отвечать на имущество измененном мероприятии в то же время разрешить изменение свойства до обновления макета?

ответ

0

Понял позже, что мне действительно не нужно перестраивать строки и столбцы каждый раз, когда меняет источник данных. Вместо этого я обрабатываю событие SizeChanged в своем UserControl и выполняю там вычисления размера. Событие, похоже, срабатывает при первом отображении элемента управления, поэтому у него есть возможность сделать начальные вычисления без каких-либо дополнительных усилий.

1

Это то, что вы ищете - UpdateLayout()

Это функция, которая определяется на UIElement, однако частое использование не рекомендуется, поскольку это может привести к передаче макета.

+0

Это не имеет никакого эффекта. ActualWidth и ActualHeight все равно 0. –

+0

Перед вызовом 'element.UpdateLayout()' вам нужно «element.Measure (Double.PositiveInfinity, Double.PostiveInfinity)», а затем «element.Arrange (element.DesiredSize)». – Dennis