Двухпроходная система макетов в WPF и Silverlight
Много раз я видел, что код в MeasureOverride
а также ArrangeOverride
То же самое, за исключением вызова меры и упорядочения в соответствующих методах и немного дополнительной логики, такой как анимация и т.д. ArrangeOverride
,
Разве не было бы просто, если бы у вас был просто способ передать свою логику измерения в одном месте, и система компоновки запоминает это и имеет событие, когда каждый элемент собирается добавить и вы применяете дополнительную логику анимации и т. Д.?
Я что-то пропустил?
1 ответ
Да, вам не хватает тонкой разницы между ними.
В MeasureOverride
Родитель спрашивает ребенка, насколько большим он хочет быть.
В ArrangeOverride
родитель сообщает ребенку, сколько места у него на самом деле и где он находится.
Это похоже на бюджет или время проверки на работе: ваш начальник спрашивает, сколько денег вы хотите, затем смеется и говорит, сколько вы на самом деле получите и когда. Подобно контролю над детьми, вы должны приложить все усилия с тем, что вам дают.
Чтобы немного взглянуть на это, одним из ключевых моментов WPF является масштабируемый пользовательский интерфейс. Как и в сценарии с начальником / сотрудником, приведенным выше, потребности родительского / дочернего контроля должны быть сбалансированы. Тот факт, что дочерний элемент управления запрашивает определенный размер, не означает, что родительский элемент управления может предоставить это пространство, поэтому его необходимо передать дочернему элементу. OTOH, с увеличением размера мониторов ваш ребенок может получить значительно больше недвижимости, чем ему действительно нужно.