Actually it’s very easy to achieve this. Just traverse the visual tree upwards to find the root.
public static class VisualTreeHelper
{
public static ContentPage FindParentPage(Element view)
{
if (view is ContentPage page)
{
return page;
}
return FindParentPage(view.Parent);
}
}
This does what we intended to do, but… we can do better than that!
Maybe we don’t want to just find the (Content)Page, how about finding the root grid, or a parent of a specific type. We just need to take that function and convert it to a generic function, that’s all, and we are way more flexible.
public static class VisualTreeHelper
{
public static T FindParentPage<T>(Element view)
where T:Page
{
return FindParentElement<T>(view);
}
public static T FindParentElement<T>(Element view)
where T:Element
{
if (view is T page)
{
return page;
}
if (view.Parent == null)
{
return null;
}
return FindParentElement<T>(view.Parent);
}
}