public static ItemsControl ItemsControlFromItemContainer(AvaloniaObject container) { ILogical uiLogical = container as ILogical; if (uiLogical == null) { return(null); } // ui appeared in items collection ItemsControl ic = LogicalExtensions.GetLogicalParent(uiLogical) as ItemsControl; if (ic != null) { // this is the right ItemsControl as long as the item // is (or is eligible to be) its own container //IGeneratorHost host = ic as IGeneratorHost; //if (host.IsItemItsOwnContainer(ui)) // return ic; //else // return null; } IVisual uiVisual = container as IVisual; uiVisual = VisualTree.VisualExtensions.GetVisualParent <IVisual>(uiVisual); return(GetItemsOwner(uiLogical as AvaloniaObject)); }
/// <summary> /// returns the children by control /// </summary> /// <param name="parent"></param> /// <param name="forceUsingTheVisualTreeHelper"></param> /// <returns></returns> public static IEnumerable <IControl> GetChildObjects(this IControl parent, bool forceUsingTheVisualTreeHelper = false) { if (parent == null) { yield break; } ILogical parentLogical = parent as ILogical; if (!forceUsingTheVisualTreeHelper && (parentLogical != null)) { foreach (var item in LogicalExtensions.GetLogicalChildren(parentLogical)) { IControl avalonia = item as IControl; if (avalonia != null) { yield return(item as IControl); } } } else { IVisual visual = parent as IVisual; foreach (var item in VisualTree.VisualExtensions.GetVisualChildren(visual)) { IControl avalonia = item as IControl; if (avalonia != null) { yield return(item as IControl); } } } }