/// <summary> /// Recursive method to iterate in the controls obtained from the GetControlsIterator /// </summary> /// <param name="parent">The actual control in the search</param> /// <param name="control">The control to be searched</param> /// <param name="VisualParentDictionary">Stores the controls and their parent found previously</param> /// <returns></returns> public static IStateObject FindVisualParent(IControlsContainer parent, ControlViewModel control, Dictionary<string, IStateObject> VisualParentDictionary) { if (parent == null) { return null; // GetControlsIterator can return null controls } var Controls = parent.GetControlsIterator(); IStateObject VisualParent = null; for (var i = 0; i < Controls.Count(); i++) { var ctl = Controls.ElementAt(i); if (ctl == control) { if (!VisualParentDictionary.ContainsKey(control.UniqueID)) VisualParentDictionary.Add(control.UniqueID, parent); return parent as IStateObject; } else { VisualParent = FindVisualParent(ctl, control, VisualParentDictionary); if (VisualParent != null) { return VisualParent; } } } return VisualParent; }