FrameworkElement FillLinkedNode(XmlLinkedNode linkedNode) { StackPanel commonPanel = new StackPanel(); commonPanel.Orientation = Orientation.Vertical; if (linkedNode.Value != null) { commonPanel.Children.Add(FillSimpleValue(linkedNode)); } else { Expander childExpander = new Expander(); childExpander.ExpandDirection = ExpandDirection.Down; childExpander.Header = linkedNode.Name; StackPanel childPanel = new StackPanel(); childPanel.Orientation = Orientation.Vertical; linkedNode.ForEach(lnode => { var res = lnode as System.Xml.XmlLinkedNode; childPanel.Children.Add(FillLinkedNode(res)); }); if (childPanel.Children.Count == 1) commonPanel.Children.Add(childPanel); else { childPanel.Margin = new Thickness(20, 0, 0, 0); childExpander.Content = childPanel; commonPanel.Children.Add(childExpander); } } return commonPanel; }