private void ArrangeContainedElements() { ContainerElement parentEleme = this; //order the unorderdelements by zorder //and start building the tree by pluggin each element under it foreach (var elem in unorderdelements.OrderByDescending(x => x.ZOrder)) { parentEleme.AddContainedElement(elem); if (elem is ContainerElement) { parentEleme = (ContainerElement)elem; } } }