确定WPF元素相对于某个父级的边界矩形

我认为这是一个非常简单的请求,但我似乎无法在搜索中找到确凿的答案。 如何确定窗口中特定视觉元素相对于其他父元素的边界?

我尝试过使用LayoutInformation.GetLayoutSlot但这似乎只是在0,0处返回一个Rect ,并不反映元素的实际位置。

我想要做的是使用RenderTargetBitmap拍摄窗口的“屏幕截图”,然后将其裁剪为特定元素,但我无法获得元素的界限以知道要将位图裁剪为什么!

这很简单:

 public static Rect BoundsRelativeTo(this FrameworkElement element, Visual relativeTo) { return element.TransformToVisual(relativeTo) .TransformBounds(LayoutInformation.GetLayoutSlot(element)); } 

事实上,将它放在一个单独的方法中可能有点过分。

LayoutSlot选项根本不适用于我。 这最终给了我一个相对于指定的父/祖先控件的子位置:

  public static Rect BoundsRelativeTo(this FrameworkElement child, Visual parent) { GeneralTransform gt = child.TransformToAncestor(parent); return gt.TransformBounds(new Rect(0, 0, child.ActualWidth, child.ActualHeight)); } 

没关系,我终于设法使用LayoutInformation.GetLayoutSlot() (虽然我可能使用ActualWidth / ActualHeightRenderSize )和UIElement.TranslatePoint()

当它可以像这样简单时,似乎是一个相当复杂的解决方案:

 myElement.GetBounds( relativeElement ); 

那好吧。 也许有时间进行扩展方法。 🙂

考虑到我在这里找到的一些建议,这解决了我的问题。

 item.TransformToVisual( relativeToElement ) .TransformBounds( new Rect( item.RenderSize ) ); 
Interesting Posts