在wpf中选择所选控件的矩形

时间:2010-09-08 08:12:42

标签: wpf panel bounds visualtreehelper

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

由于

1 个答案:

答案 0 :(得分: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;
}       

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