Ограничивает прямоугольник выбранных элементов управления в wpf - PullRequest
0 голосов
/ 08 сентября 2010

Есть ли простой способ найти прямоугольник (область и местоположение), который потребуется для покрытия набора элементов управления ?? VisualTreeHelper.GetDescandentBounds () работает нормально, но нет перегруженных методов, где я могу указать элементы управления, которые следует учитывать при поиске прямоугольника границ.Любое простое решение будет с благодарностью.

Спасибо

1 Ответ

2 голосов
/ 08 сентября 2010

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;
}       

Отредактированный код: теперь будет учитываться положение отдельных визуалов относительно данного визуала.

...