获取网格内的对象坐标

本文关键字:对象 坐标 网格 获取 | 更新日期: 2023-09-27 17:58:14

我有一个网格,看起来像这样:

<grid name="my_grid"></grid>

然后我有一个名为paramBox的类对象,名为myBox。此对象插入到网格中,如下所示:

my_grid.Children.Add(myBox);

现在我的问题是:有没有办法在网格内获取myBox的坐标(x和y值)?我尝试过使用PointToScreen,但没有任何运气。如果我不在类/网格中声明任何x和y值,是否可以获得坐标?

获取网格内的对象坐标

您可以使用Margin属性来移动控件。

边距是此对象和其他对象之间的空间将在布局创建UI时相邻。其他对象参与布局的可能是对等对象(例如其他对象在公共父控件的集合中),或者也可能是对象在可视化树中的父级。

或者按照@m-y的建议使用画布而不是网格。这是演示

我建议您使用Canvas而不是Grid。然后,如果你要移动一个元素,你可以这样做(这可能不完全适合你的问题,但我可能有一些想法):

关于元素MouseDown事件:

private void Element _MouseDown(object sender, MouseButtonEventArgs e)
{
    Point position = e.GetPosition(myCanvas);
    this.myElement.RenderTransform =
            new TranslateTransform(position.X - myElement/ 2.0,
                                    position.Y - myElement/ 2.0);
        this.myCanvas.MouseMove += myCanvas_MouseMove;
        this.myCanvas.MouseUp += myCanvas_MouseUp;
}
private void myCanvas_MouseMove(object sender, MouseEventArgs e)
{
    Point position = e.GetPosition(this.myCanvas);
    ((TranslateTransform)(this.myElement.RenderTransform)).X = position.X - myElement/ 2.0;
        //
    ((TranslateTransform)(this.myElement.RenderTransform)).Y = position.Y - myElement/ 2.0;
}
 private void myCanvas_MouseUp(object sender, MouseEventArgs e)
{
     this.myCanvas.MouseMove -= myCanvas_MouseMove;
     this.myCanvas.MouseUp -= myCanvas_MouseUp;
}