题
我认为这是一个非常简单的请求,但是我似乎在搜索中找不到结论性的答案。如何相对于其他父元素来确定窗口中特定视觉元素的界限?
我尝试使用 LayoutInformation.GetLayoutSlot
但这似乎归还了 Rect
在0,0处,不会反映元素的实际位置。
我要做的是使用窗口的“屏幕截图” 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
/ActualHeight
或者 RenderSize
) 和 UIElement.TranslatePoint()
.
似乎很简单的解决方案似乎是一个相当复杂的解决方案:
myElement.GetBounds( relativeElement );
那好吧。也许是时候进行扩展方法了。 :)
考虑到我在这里发现的一些建议为我解决了问题。
item.TransformToVisual( relativeToElement )
.TransformBounds( new Rect( item.RenderSize ) );
不隶属于 StackOverflow