public static bool IsUserVisible(UIElement element)
{
if (!element.IsVisible)
return false;
var container = VisualTreeHelper.GetParent(element) as FrameworkElement;
if (container == null) throw new ArgumentNullException("container");
Rect bounds = element.TransformToAncestor(container).TransformBounds(new Rect(0.0, 0.0, element.RenderSize.Width, element.RenderSize.Height));
Rect rect = new Rect(0.0, 0.0, container.ActualWidth, container.ActualHeight);
return rect.IntersectsWith(bounds);
}
return rect.IntersectsWith(bounds)
всегда будет true, так как ваш элемент находится внутри проверяемого, что считается пересечением, а вам необходимо проверять пересечение границ элементов.rect.Contains(bounds);
и
rect.Contains(bounds.BottomLeft) && rect.Contains(bounds.BottomRight)
rect.contains
будет возвращать true, как и решение rect.IntersectsWith
, так как рассматриваются не границы элемента, а вся прямоугольная область, а вам необходимо проверять, что элемент не вылезает за пределы