UIElement.UpdateLayout Метод

Определение

Обеспечивает правильное обновление всех позиций дочерних объектов элемента UIElement для макета.

public:
 virtual void UpdateLayout() = UpdateLayout;
void UpdateLayout();
public void UpdateLayout();
function updateLayout()
Public Sub UpdateLayout ()

Комментарии

UpdateLayout в основном эквивалентен последовательному вызову InvalidateMeasure и InvalidateArrange .

Обновление макета можно принудительно выполнять с помощью кода приложения, а не полагаться на поведение встроенной системы макета с помощью метода UpdateLayout. Однако это обычно не рекомендуется. Обычно это не требуется и может привести к снижению производительности в случае чрезмерного ее выполнения. Во многих ситуациях, когда вызов UpdateLayout из кода приложения может быть уместным из-за изменений свойств, система макета, вероятно, уже будет обрабатывать обновления. Система макета также имеет оптимизацию для работы с каскадами изменений макета через отношения "родитель-потомок", и вызов UpdateLayout может работать с такой оптимизацией. Тем не менее, возможно, что ситуации макета существуют в более сложных сценариях, где вызов UpdateLayout является лучшим вариантом для устранения проблемы времени или другой проблемы с макетом. Просто используйте его намеренно и экономно. В случаях, когда вам нужно вызвать UpdateLayout, вы, вероятно, будете вызывать его сразу после вызова Children.Add некоторой коллекции дочерних элементов общего родительского макета, а затем вызова UpdateLayout для этого родительского элемента, чтобы система макета распознала новый добавленный дочерний элемент.

Один из сценариев для UpdateLayout заключается в том, что у вас есть связанные контейнеры, такие как RichTextBlock и RichTextBlockOverflow, вы внесли изменения во время выполнения в содержимое и хотите убедиться, что операции, не связанные с отображением пользовательского интерфейса, имеют возможность запустить макет и активировать перераспределение содержимого между связанными контейнерами. Например, это может потребоваться для подготовки макета к печати. Пример этого сценария см. в сценарии No 5 в примере печати.

Совет

Если у вас есть сценарий, в котором вы используете привязку данных к пользовательскому интерфейсу и не видите обновления макета в коллекциях источников данных, вызов UpdateLayout, скорее всего, не поможет. Скорее всего, у вас возникли проблемы с объявлениями привязки, контекстом данных или поддержкой INotifyPropertyChanged или INotifyCollectionChanged в источнике данных.

Применяется к

См. также раздел