in src/BehaviorsSDKNative/Microsoft.Xaml.Interactivity/VisualStateUtilities.cpp [100:117]
bool VisualStateUtilities::ShouldContinueTreeWalk(FrameworkElement^ element)
{
if (element == nullptr || dynamic_cast<UserControl^>(element) != nullptr)
{
return false;
}
else if (element->Parent == nullptr)
{
// Stop if parent's parent is null AND parent isn't the template root of a ControlTemplate or DataTemplate
FrameworkElement^ templatedParent = dynamic_cast<FrameworkElement^>(VisualTreeHelper::GetParent(element));
if (templatedParent == nullptr || (!(dynamic_cast<Control^>(element) != nullptr) && !(dynamic_cast<ContentPresenter^>(element) != nullptr)))
{
return false;
}
}
return true;
}