我正在使用TransformToVisual
来获取控件相对于其父级的位置。在将此控件添加到StackPanel
后,我需要此位置,但是,我获得的结果是(0, 0)
翻译。
如果使用Task
将此方法延迟一毫秒,结果就会很好。
我不理解这种行为,因为我没有做任何线程。有人有解决方案来处理这个问题(没有任务)吗?
这是缩短的代码:
public readonly Point position;
public Container(Box box) {
InitializeComponent();
//StackPanel with custom margins and centered alignment
stackPanel.Children.Add(box);
position = this.TransformToVisual(box).Transform(new Point(0, 0))
}
答案 0 :(得分:1)
当你在那里添加一个孩子时,控制在孩子身上,并且使用测量和排列机制来确定它应该集中在哪里。 因为你在添加控件后直接进行调用,所以还没有发生移动事物。 一旦完成移动,有很多方法可以获得该位置。 你似乎没有立即做任何事情,所以你可以做出表达。如果你以后使用它,只需要一次:
white-space
或者 通过调用UpdateLayout强制布局过程
public Point position() => this.TransformToVisual(box).Transform(new Point(0, 0))
;
或者 使用调度程序推迟计算。
stackPanel.Children.Add(box);
stackpanel.UpdateLayout();
position = this.TransformToVisual(box).Transform(new Point(0, 0))