Wpf 如何获取子元素相对于父元素的位置?

Wpf 如何获取子元素相对于父元素的位置?,wpf,Wpf,如果有画布父对象,则很容易获得子对象的位置: Canvas.GetLeft/Top (child) 但是我如何才能为其他类型的父母获得孩子的位置呢?可以使用控制的TranslatePoint方法来完成 UIElement container = VisualTreeHelper.GetParent(control) as UIElement; Point relativeLocation = control.TranslatePoint(new Point(0, 0), container);

如果有画布父对象,则很容易获得子对象的位置:

Canvas.GetLeft/Top (child)

但是我如何才能为其他类型的父母获得孩子的位置呢?

可以使用控制的
TranslatePoint
方法来完成

UIElement container = VisualTreeHelper.GetParent(control) as UIElement;
Point relativeLocation = control.TranslatePoint(new Point(0, 0), container);

新点(0,0)
表示控件的左上角点,
TranslatePoint
将返回该点相对于父控件的位置(我假设父控件是一个
UIElement
)。

您可以放置控件的任何祖先而不是容器。

我不知道TranslatePoint。非常方便<代码>点有一个无参数构造函数,该构造函数初始化为与新点(0,0)相同的值如果有人想保存这几个字符。
TranslatePoint
将返回该点相对于目标元素(在本例中为容器)的位置。从C#7.1开始,您可以简单地使用
默认值
而不是
新点(0,0)
UIElement container = VisualTreeHelper.GetParent(control) as UIElement;
Point relativeLocation = control.TranslatePoint(new Point(0, 0), container);