public IEnumerable <string> DeserializeControl(HeliosVisualCollection controls, XmlReader xmlReader) { TypeConverter boolConverter = TypeDescriptor.GetConverter(typeof(bool)); HeliosVisual control = (HeliosVisual)CreateNewObject("Visual", xmlReader.GetAttribute("TypeIdentifier")); if (control != null) { string name = xmlReader.GetAttribute("Name"); if (xmlReader.GetAttribute("SnapTarget") != null) { control.IsSnapTarget = (bool)boolConverter.ConvertFromInvariantString(xmlReader.GetAttribute("SnapTarget")); } if (xmlReader.GetAttribute("Locked") != null) { control.IsLocked = (bool)boolConverter.ConvertFromInvariantString(xmlReader.GetAttribute("Locked")); } if (xmlReader.IsEmptyElement) { xmlReader.Read(); } else { xmlReader.ReadStartElement("Control"); control.ReadXml(xmlReader); foreach (string progress in DeserializeControls(control.Children, xmlReader)) { yield return(progress); } ; xmlReader.ReadEndElement(); } control.Name = name; controls.Add(control); yield return($"loaded {control.TypeIdentifier}"); } else { xmlReader.Skip(); yield return("failed to load a control"); } }
public void DeserializeControls(HeliosVisualCollection controls, XmlReader xmlReader) { if (!xmlReader.IsEmptyElement) { xmlReader.ReadStartElement("Children"); while (xmlReader.NodeType != XmlNodeType.EndElement) { HeliosVisual control = DeserializeControl(xmlReader); if (control != null) { controls.Add(control); } } xmlReader.ReadEndElement(); } else { xmlReader.Read(); } }