I'd love to see a method in VisualTreeHelper that would recurse through the
parents and find the first one of the type I passed in.

In my specific scenario, I want to retireve the parent TreeViewItem of a
checkbox, which is inside a stackpanel, and I don't like doing
sender.Parent.Parent (with all the proper casts) since that ties my UI to my
code-behind.

Here's the code I came with, if anyone wants it:



static TObject FindVisualParent<TObject>(UIElement child)
where TObject : UIElement
{
if (child == null)
{
return null;
}

UIElement parent = VisualTreeHelper.GetParent(child) as UIElement;

while (parent != null)
{
TObject found = parent as TObject;
if (found != null)
{
return found;
}
else
{
parent = VisualTreeHelper.GetParent(parent) as UIElement;
}
}

return null;
}