有没有一种简单的方法可以找到覆盖一组控件所需的矩形(区域和位置)? VisualTreeHelper.GetDescandentBounds()工作正常,但没有重载方法,我可以指定它应该考虑用于查找边界矩形的控件。任何简单的解决方案将不胜感激。
由于
答案 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;
}
编辑代码:现在将相对于给定视觉考虑各个视觉效果的位置。