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

我尝试使用 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 ) );
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top