void AddRandomItem(UxElement element, List <UxElement> descendants) { var containers = descendants.Count > 0 ? descendants.Where(x => x.Name == "Grid") : new[] { element }; var container = RandomItem(containers); var existingChildCount = container.Elements.Count(); var insertPoint = _rng.Next(0, existingChildCount + 1); var insertElement = UxElement.Parse( $"<Grid ChildOrder=\"{(Depth(container) % 2 == 0 ? "RowMajor" : "ColumnMajor")}\" Background=\"{RandomItem(_colors)}\" />"); if (insertPoint == existingChildCount) { container.Add(insertElement); ; } else { container.Elements.ElementAt(insertPoint).AddBeforeSelf(insertElement); } }
public static int Depth(UxElement element) { return(element.Parent == null ? 0 : Depth(element.Parent) + 1); }
static UxElement FindX(UxElement root) { return(root.DescendantsAndSelf().Single(el => el.Name == "X")); }