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 в источнике данных.