Элементы управления размещаются в WPF как структура дерева (VisualTree). «Панель» - это тип элемента управления, который может содержать в себе множество дочерних элементов UIElement или, другими словами, панели используются в качестве LayoutSystem в WPF / Silverlight. Платформой для заданных панелей являются StackPanel, Grid, Canvas и т. Д. А если вы извлекаете класс из Panel и переопределяете MeasureOverride () и ArrangeOverride (), вы сможете создавать собственные панели.
Хорошо, теперь ответ на вопрос. В пользовательской панели или элементе управления вы можете вызвать child.Measure (availableSize), чтобы все дети следующего уровня знали, что «availablesize» - это то, что теперь имеет «child». И дает возможность выбрать те дочерние элементы, которые вписываются в него. Как будто я говорю своим детям, что это пространство, которое мы должны решить, какие у вас размеры. Поэтому, когда элемент управления вызывает Measure (), он передает его последующим дочерним элементам, и каждый из них будет вызывать свой собственный measure () до конца VisualTree, а после завершения этого вызова вы сможете увидеть требуемый размер дочернего элемента, требуемого в дочернем элементе. .DesiredSize. Теперь, когда у вас есть все желаемые размеры детей, вы можете вычислить желаемый размер элемента управления и вернуть его в конце функции MeasureOverride ()
Механизм компоновки работает в два этапа: «Измерить и расположить». Как только вы измерите своих детей с имеющимся размером, вы можете расположить своих детей, потому что в этот момент вы будете знать, какой размер нужен каждому из детей от ребенка. DesiredSize