0

次のようなグリッドがあります。

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

次に、 myBoxという名前の paramBox というクラス オブジェクトがあります。このオブジェクトは、次のようにグリッドに挿入されます。

my_grid.Children.Add(myBox);

ここに私の質問があります:グリッド内のmyBoxの座標 (x と y の値) を取得する方法はありますか? PointToScreen を使ってみましたが、うまくいきませんでした。クラス/グリッド内で x 値と y 値を宣言しない場合、座標を取得することは可能ですか?

4

2 に答える 2

0

Margin プロパティを使用して、コントロールを移動できます。

マージンは、このオブジェクトと、レイアウトが UI を作成するときに隣接する他のオブジェクトとの間のスペースです。レイアウトに参加している他のオブジェクトは、ピア オブジェクト (共通の親コントロールのコレクション内の他のオブジェクトなど) である場合もあれば、ビジュアル ツリーでこのオブジェクトの親である場合もあります。

@my が提案したように、グリッドの代わりにキャンバスを使用します。ここにデモがあります

于 2013-02-07T13:03:06.603 に答える
0

グリッドの代わりにキャンバスを使用することをお勧めします。次に、要素を移動する場合は、次のようにできます(これは問題に正確に適合しない場合がありますが、いくつかのアイデアがあるかもしれません):

要素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;
}
于 2013-02-07T12:51:32.047 に答える