Rect имеет метод Union(Rect)
, который увеличивает текущий прямоугольник, чтобы также включить второй прямоугольник. С помощью linq (не забудьте добавить using System.Linq;
в ваш файл кода) также довольно просто получить список прямоугольников для списка визуальных элементов:
private Rect GetBoundingRect(Visual relativeTo, List<Visual> visuals)
{
Vector relativeOffset = new Point() - relativeTo.PointToScreen(new Point());
List<Rect> rects = visuals
.Select(v => new Rect(v.PointToScreen(new Point()) + relativeOffset, VisualTreeHelper.GetDescendantBounds(v).Size))
.ToList();
Rect result = rects[0];
for (int i = 1; i < rects.Count; i++)
result.Union(rects[i]);
return result;
}
Отредактированный код: теперь будет учитываться положение отдельных визуалов относительно данного визуала.