UIElement.UpdateLayout Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
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 в источнике данных.