获得WPF元素的真正可视边界框?

Dal*_*lal 5 wpf wpf-controls

对于我的问题的简化版本,我想计算布局转换(可能甚至是渲染转换)形状的边界框,这样我总是能够完美地围绕形状拟合一个矩形,无论它的旋转或比例如何也许.如果你能解决这个问题,我会很高兴.

更复杂的问题是计算任何框架元素的可视边界框.通过'视觉边界框',我的意思是框架元素中最顶部的可见像素决定了上限,最右边的可见像素决定了右边界等等.如果你能解决这个问题,我会更开心.

我尝试过使用LayoutInformation.GetLayoutSlot(),但这并不是以预期的方式工作.'布局槽'实际上比实际边界大很多.我也尝试使用VisualTreeHelper.GetDescendantBounds(),但由于我的测试形状的VisualParent受到保护,我无法访问此属性,并决定在我进一步进入之前检查这里.

我希望有人可以提供一种简单的方法来获取WPF中元素的真实可视边界框,这是在所有变换之后计算的.如果我在问题中没有说清楚,请告诉我.

小智 9

private Rect GetRectOfObject(FrameworkElement _element)
{
    Rect rectangleBounds = new Rect();
    rectangleBounds = _element.RenderTransform.TransformBounds(new Rect(0, 0, _element.Width, _element.Height));
    return rectangleBounds;
}
Run Code Online (Sandbox Code Playgroud)

也许这会有所帮助.

  • `new Rect(0,0,_element.Width,_element.Height)`可以简化为`new Rect(_element.RenderSize)`. (8认同)

Ric*_*key 4

您将获得良好的结果,VisualTreeHelper.GetDescendantBounds()并且可以使用它VisualTreeHelper.GetParent()来访问受其他保护的VisualParent财产。然而,您可能想要做的是调用GetDescendantBounds形状本身,而不是其父级,因为无论其名称如何,该方法都会返回父级及其所有后代的边界。