Двухпроходная система компоновки в WPF и Silverlight

Много раз я видел, что код в MeasureOverride и ArrangeOverride одинаков, за исключением вызова измерения и упорядочения в соответствующих методах и немного дополнительной логики, такой как анимация и т. д., для каждого элемента в ArrangeOverride.

Разве не было бы просто, если бы у вас был просто метод для передачи вашей логики измерения в одном месте, и система компоновки запоминала бы это, и у вас было бы событие, когда каждый элемент собирается добавить, и вы применяете дополнительную логику анимации и т. д.?

Я что-то упустил?


person user510471    schedule 17.11.2010    source источник


Ответы (1)


Да, вы упускаете тонкую разницу между ними.

В MeasureOverride родитель спрашивает ребенка, насколько большим он хочет быть.

В ArrangeOverride родитель сообщает дочернему элементу, сколько места у него есть на самом деле и где он находится.

Это похоже на составление бюджета или время пересмотра на работе: ваш начальник спрашивает, сколько денег вы хотите, затем смеется и говорит вам, сколько вы на самом деле получите и когда. Как и в случае с контролем за детьми, вы должны делать все возможное с тем, что вам дано.

Чтобы взглянуть на это с небольшой точки зрения, одним из ключевых моментов WPF является масштабируемый пользовательский интерфейс. Как и в приведенном выше сценарии начальник/сотрудник, потребности родительского/дочернего элемента управления необходимо поддерживать в балансе. Тот факт, что дочерний элемент управления запрашивает определенный размер, не означает, что родительский элемент управления может предоставить это пространство, поэтому его необходимо сообщить дочернему элементу. OTOH, с увеличением размера мониторов у вашего ребенка может оказаться значительно больше недвижимости, чем ему действительно нужно.

person slugster    schedule 17.11.2010