Pictures can tell a thousand words.
When I climb up the visual tree I see the last parent is of type System.Windows.Controls.Pimitives.PopupRoot

But Whey I try to actually make a comparison to that type VS complains it's not valid.

PopupRoot is internal to PresentationFramework, so you cannot access it from your assembly. You can compare the type name with GetType().FullName, but PopupRoot is an implementation detail that can change in future framework versions so I wouldn't rely on it.
PopupRoot is internal, so you will not be able to reference it. However, if you use LogicalTreeHelper, you'll be able to find Popup if exists. LogicalTreeHelper will return NULL if there is no logical parent, so you need to use it in addition to walking visual tree with VisualTreeHelper.
Here is an example how you can use it:
var popupRootFinder = VisualTreeHelper.GetParent((DependencyObject)your_visual_element);
while (popupRootFinder != null)
{
var logicalRoot = LogicalTreeHelper.GetParent(popupRootFinder);
if (logicalRoot is Popup)
{
// popup root found here
break;
}
popupRootFinder = VisualTreeHelper.GetParent(popupRootFinder);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With