Получить координаты объектов внутри сетки

У меня есть сетка, которая выглядит так:


Тогда у меня есть объект класса с именем paramBox с именем myBox . Этот объект вставляется в сетку следующим образом:

my_grid.Children.Add(myBox);

Теперь вот мой вопрос: Есть ли способ получить координаты (значения x и y) для myBox внутри сетки? Я пробовал использовать PointToScreen без везения. Можно ли даже получить координаты, если я не объявляю никаких значений x и y внутри класса/сетки?

0
nl ja de
A Grid на самом деле не имеет системы координат x/y. Он использует столбцы/строки. Если вы хотите использовать систему координат x/y, вы должны использовать Canvas .
добавлено автор m-y, источник
Я не уверен, есть ли эквивалент в wpf, но в winforms каждый элемент управления имеет свойство Bounds, где вы можете получить значения x и y
добавлено автор Tomtom, источник
Хорошо, может быть, мне нужно посмотреть и посмотреть, смогу ли я это изменить
добавлено автор FewWords, источник

2 ответы

Я предлагаю использовать 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;
}
0
добавлено
Теперь вот мой вопрос: есть ли способ получить координаты (значения x и y) для myBox внутри сетки? Итак, вы собираетесь переместить этот объект. Я прав?
добавлено автор Hossein Narimani Rad, источник
Это было трудно, понимая все это из первоначального вопроса!
добавлено автор Hossein Narimani Rad, источник
Это не работает. Я получаю разные значения, но объект не движется. Я предполагаю, что Mouse.GetPosition зависит от того, где мышь
добавлено автор FewWords, источник
Ну, я собираюсь переместить другой объект, и я хочу знать, когда этот объект находится над первым объектом. Я уже знаю, где объект, который движется, имеет для координат (я проверяю положение мыши). Но я не могу проверить, не превышает ли он myBox , потому что я не могу получить координаты для myBox
добавлено автор FewWords, источник

Вы можете использовать свойство поля , чтобы переместить элемент управления.

Поля - это пространство между этим объектом и другими объектами, которые   будет смежным, если макет создает пользовательский интерфейс. Другие объекты   участие в макете может быть одноранговыми объектами (такими как другие объекты   в коллекции общего родительского элемента управления), или также может быть   родитель объекта в визуальном дереве.

or use canvas instead of grid as @m-y suggested. here is a DEMO

0
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot