изменить координаты кнопки в сетке с помощью кнопки
Я делаю игру-головоломку 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);