Как проверить, не выходит ли элемент из родительского контейнера?

У меня есть подобная WrapPanel: wrappanel

У нее вертикальная ориентация, т.е элементы идут сверху вниз. Количество элементов заранее неизвестно (все рисуется на основе данных из бд). Так же неизвестен размер этих элементов. Для контекста: это хосты на датацентре, на которых работают vm'ки, программа это все визуализирует. Хостов, как и vm, может быть разное количество.

Проблема такая: мне нужно отрисовывать wrappanel (spb-2) вниз до тех пор, пока все хосты не будут показаны. Т.е 1, 2, 3, 4, 5, 6 - отображаются правильно, а вот 7 - находится за границами родительского контейнера.

Сначала я пытался через подобный метод увеличивать размер панели, пока элементы не будут полностью видны:

private bool IsUserVisible(FrameworkElement element, FrameworkElement container)
{
if (!element.IsVisible)
    return false;

Rect bounds = element.TransformToAncestor(container).TransformBounds(new Rect(0.0, 0.0, element.ActualWidth, element.ActualHeight));
Rect rect = new Rect(0.0, 0.0, container.ActualWidth, container.ActualHeight);
return rect.Contains(bounds.TopLeft) || rect.Contains(bounds.BottomRight);
} 

Но это не работает, всегда возвращает true, и вообще не очень адекватно себя ведет метод (не получает координаты). Сейчас я думаю, что правильнее будет сравнить координаты родительского и вложенного элемента. Как это лучше сделать?


Ответы (0 шт):