Мне не удалось найти какое-либо событие или свойство, которое указывало бы на то, является ли элемент управления видимым / невидимым, когда родитель невидим, поэтому мне пришлось подключиться к событию LayoutUpdated и проверить VisibilityProperty всех визуальных предков.* вот фрагмент, если интересно:
private bool IsControlVisible(FrameworkElement element)
{
var ancestors = element.GetVisualAncestorsAndSelf().ToList();
foreach(var a in ancestors)
{
Visibility visibility = (Visibility)a.GetValue(FrameworkElement.VisibilityProperty);
if (visibility == Visibility.Collapsed)
return false;
}
return true;
}