#1,192 – Calling Arrange on Child Elements
October 31, 2014 3 Comments
When you author a custom control that contains child elements, you should call the Arrange method of each child object within your ArrangeOverride method.
Below is an example, from a custom element with one child. The parent control has a dependency property, ChildProperty, representing the single child element.
protected override Size ArrangeOverride(Size finalSize) { UIElement childElement = (UIElement)GetValue(ChildProperty); if (childElement != null) childElement.Arrange(new Rect(new Point(0.0, 0.0), finalSize)); return finalSize; }
Below is a second example, from a custom panel that renders a treemap-like element. The ChildrenTreemapOrder method returns an enumerable of ChildAndRect objects.
protected override Size ArrangeOverride(Size finalSize) { foreach (ChildAndRect child in ChildrenTreemapOrder(InternalChildren.Cast<UIElement>(), finalSize)) child.Element.Arrange(child.Rectangle); return finalSize; }