0

有没有一种简单的方法可以找到覆盖一组控件所需的矩形(区域和位置)?VisualTreeHelper.GetDescandentBounds()工作正常,但没有重载的方法我可以指定它应该考虑查找边界矩形的控件。任何简单的解决方案将不胜感激。

谢谢

4

1 回答 1

2

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

编辑后的代码:它现在将考虑各个视觉对象相对于给定视觉对象的位置。

于 2010-09-08T08:53:32.570 回答