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

tom*_*ene 41 wpf

如果有一个Canvas父级,很容易获得一个孩子的位置:

Canvas.GetLeft/Top (child)
Run Code Online (Sandbox Code Playgroud)

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

Eli*_*sha 69

它可以使用TranslatePoint控制方法完成.

UIElement container = VisualTreeHelper.GetParent(control) as UIElement;
Point relativeLocation = control.TranslatePoint(new Point(0, 0), container);
Run Code Online (Sandbox Code Playgroud)

new Point(0, 0)表示控件的左上角,并TranslatePoint返回该点相对于父控件的位置(我假设父级是a UIElement).
您可以代替容器放置控件的任何祖先.

  • 从 C# 7.1 开始,您可以简单地使用“default”而不是“new Point(0,0)”。 (3认同)
  • 我不知道 TranslatePoint。非常便利! (2认同)
  • `Point` 有一个无参数构造函数,如果有人想保存这几个字符,它会初始化为与 `new Point(0,0)` 相同的构造函数。 (2认同)