Можете привести пример, когда следует использовать UIElement.UpdateLayout ()? - PullRequest
11 голосов
/ 28 марта 2012

Я читал об этом методе UpdateLayout () в MSDN.

Там написано:

Гарантирует, что все визуальные дочерние элементы этого элемента правильно обновлено для макета.

Но я не понимаю, что подразумевается под неправильно обновленным макетом .

Я работаю с Silverlight / WPF более года, но до сих пор ни разу не использовал этот метод.

Так может ли кто-нибудь дать мне пример, который потребует использования этого метода? Так что я действительно могу понять, что он делает и когда мне следует его использовать?

Ответы [ 3 ]

9 голосов
/ 29 марта 2012

Возможно, вы захотите вызвать это, если вам нужен элемент управления для немедленного завершения его макета, чтобы вы могли что-то сделать на его основе.Например, вы можете вызвать UpdateLayout на дочернем элементе управления, чтобы он получил ActualHeight и ActualWidth, если вы хотите сделать что-то еще на основе этого (например, расположить его или нарисовать что-то с соответствующим размером).

3 голосов
/ 28 марта 2012

По моим исследованиям, UpdateLayout представляется очень убедительным способом обновления всех элементов управления макета. Тем не менее, в большинстве случаев система верстки достаточно умная и достаточно быстрая для самостоятельного обновления. Все, что я прочитал, наводит меня на мысль, что этот вызов необходим, только если вы делаете много изменений макета (добавляете элементы управления и перемещаете их), и вам нужен один конкретный сценарий макета, который будет отображаться, пока остальная часть стека обновлений завершено (однако мне еще предстоит увидеть хороший пример для отображения этого ... нормальный алгоритм компоновки, кажется, просто хорош). Эта статья MSDN о макете должна помочь прояснить ситуацию.

Однако из вышесказанного:

Метод UpdateLayout вызывает рекурсивное обновление макета и является часто не нужно

и эта документация

Частые вызовы InvalidateArrange или, в частности, UpdateLayout, имеют значительные последствия для производительности, если большое количество элементов существуют в пользовательском интерфейсе. Избегайте вызова этого метода, если вы абсолютно требовать точного состояния макета для последующих вызовов других API в ваш код.

В заключение прямо отвечу на ваш вопрос. В основном это делается самостоятельно с помощью внутренней логики пользовательского интерфейса, и вам, скорее всего, никогда не понадобится ее использовать. С учетом вышесказанного мне кажется, что это было бы довольно очевидно, когда вам нужно его использовать (и это не для многопоточности, как думали многие, включая меня)

0 голосов
/ 28 марта 2012

Я думаю, что наиболее часто используется при создании элементов управления.Например: если в коде вы чувствуете, что добавлен новый элемент управления или произошло что-то конкретное, вы можете вызвать этот метод UpdateLayout (), чтобы принудительно изменить макет элементов управления.В некоторых случаях WPF может посчитать, что пользовательский интерфейс изменяется достаточно, поэтому он сам вызывает UpdateLayout () вашего элемента управления.Мы все совершаем ошибки ... если вы нашли элемент управления, который должен «перерисовать» или «переставить» его дочерние элементы, вы можете попытаться принудительно «обновить» его, вызвав «UpdateLayout».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...