изменить координаты кнопки в сетке с помощью кнопки

интерфейс игровой сетки

Я делаю игру-головоломку 15 на wpf и xaml, где вам нужно переместить пустую плитку в сетке, чтобы решить головоломку. (см. связанное изображение для контекста) Я хочу знать, как я могу изменить координаты кнопки при переключении ее с координатами пустой плитки с помощью кнопок вверх, вниз, влево, вправо. Здесь ниже у вас есть пример координат, о которых я говорю, .row и .column.

              <Button x:Name="Button10" Grid.Column="1" Grid.Row="0" Content="3"/>```

2 ответа

Вы можете изменить строку или столбец ваших кнопок следующим образом.

      // Move up Button5 example
private void ButtonUp_Click(object sender, RoutedEventArgs e)
{
    // Get the current Row
    int currentRow = Grid.GetRow(Button5);

    // Calculate the next Row
    int nextRow = Math.Min(Math.Max(currentRow - 1, 0), 3);

    // Change the Row
    Grid.SetRow(Button5, nextRow);
}

// Move left Button5 example
private void ButtonLeft_Click(object sender, RoutedEventArgs e)
{
    // Get the current Column
    int currentColumn = Grid.GetColumn(Button5);

    // Calculate the next Column
    int nextColumn = Math.Min(Math.Max(currentColumn - 1, 0), 3);

    // Change the Column
    Grid.SetColumn(Button5, nextColumn);
}

Вы можете получить положение элемента, вызвав его как часть Grid.GetRowили же Grid.GetColumnметоды.

      int row = Grid.GetRow(button1);
int column = Grid.GetColumn(button1);

Возможно, будет лучше создать для этого тип объекта, чтобы вы могли отслеживать многие кнопки и их положение даже после того, как они были перемещены.

          public class position
    {
        private int row;
        private int column;
        public position(int row, int column)
        {
            this.Row = row;
            this.Column = column;
        }

        public int Row
        {
            get => row;
            set => row = value;
        }
        public int Column
        {
            get => column;
            set => column = value;
        }
    }

а затем вы можете отметить текущую позицию нескольких элементов сетки

      position first_button = new position(Grid.GetRow(button1), Grid.GetColumn(button1));
position second_button = new position(Grid.GetRow(button2), Grid.GetColumn(button2));

и оттуда вы можете вызывать эти объекты для перемещения элементов сетки

      Grid.SetColumn(button2, first_button.Column);
Grid.SetRow(button2, first_button.Row);
Другие вопросы по тегам