public static object FindLogicalOrVisualAncestor(this UIView startElement, Predicate<object> condition, int maxDepth = -1)
{
// Try to find visual ancestor one level up
object visualAncestor = FindVisualAncestor(startElement, condition, 1);
if (visualAncestor != null)
{
return visualAncestor;
}
// If we didn't find anything, try visual parent and call this method (recursive)
var visualParent = startElement.GetVisualParent();
if (visualParent != null)
{
object lastResortVisualAncestor = FindLogicalOrVisualAncestor(visualParent, condition);
if (lastResortVisualAncestor != null)
{
return lastResortVisualAncestor;
}
}
return null;
}