Двухпроходная система макетов в WPF и Silverlight - PullRequest
5 голосов
/ 17 ноября 2010

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

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

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

1 Ответ

9 голосов
/ 17 ноября 2010

Да, вам не хватает тонкой разницы между ними.

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

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

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

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

...