public RadElement GetElementAtPoint( RadElement parent, Point point, List<RadElement> foundElements, Predicate<RadElement> predicate) { if (parent.Visibility != ElementVisibility.Visible) return (RadElement) null; ChildrenListOptions options = ChildrenListOptions.ZOrdered | ChildrenListOptions.ReverseOrder | ChildrenListOptions.IncludeOnlyVisible; Rectangle clientRectangle = this.Control.ClientRectangle; foreach (RadElement child in parent.GetChildren(options)) { if (child.ElementState == ElementState.Loaded && child.HitTest(point)) { if (foundElements != null && !(child is BorderPrimitive)) foundElements.Add(child); RadElement elementAtPoint = this.GetElementAtPoint(child, point, foundElements, predicate); if (elementAtPoint != null) return elementAtPoint; if (predicate == null || predicate(child)) return child; } } return (RadElement) null; }
internal RadElement GetElementAtPoint(RadElement parent, Point point, List <RadElement> foundElements) { if (parent.Visibility != ElementVisibility.Visible) { return(null); } ChildrenListOptions childrenFlags = ChildrenListOptions.ZOrdered | ChildrenListOptions.ReverseOrder | ChildrenListOptions.IncludeOnlyVisible; Rectangle client = this.Control.ClientRectangle; foreach (RadElement element in parent.GetChildren(childrenFlags)) { if (element.ElementState != ElementState.Loaded) { continue; } if (element.HitTest(point)) { bool addElement = (foundElements != null) && !(element is BorderPrimitive); if (addElement) { foundElements.Add(element); } RadElement res = GetElementAtPoint(element, point, foundElements); if (res != null) { return(res); } if (element.ShouldHandleMouseInput) { return(element); } } } return(null); }