2

Имею сетку, построенную с помощью Grid 10*10. В ячейках этой сетки лежат элементы Button, созданные и помещенные туда динамически.

Вопрос, как мне обратится к этим ячейкам, чтоб можно было взаимодействовать с помещенными в них элементами (к примеру поменять им цвет, или свойство content). Не могу понять как это в WPF делается..

Метод создающий кнопку.

private void CreateItemField(int i, int j, Brush color)
{
    Button button = new Button();
    button.Margin = new Thickness(0.5d);
    button.Background = color;
    button.Name = "btn" + i + j;

    MainGrid.Children.Add(button);
    Grid.SetColumn(button, i);
    Grid.SetRow(button, j);
}

1 Answers1

1

Простым путём — никак.

Если вы почему-то решили создавать контент в code-behind (почему не через ItemsControl, с MVVM?), проще всего при создании запомнить отображение номера клетки в кнопку.

Если вы этого не делаете, Grid сам по себе не имеет понятия о ячейках. Вы можете опросить у него Children, получить список всех дочерних элементов, и искать среди них в цикле (или через LINQ) нужные, пользуясь функциями Grid.GetRow и Grid.GetColumn для получения нужных индексов.


Вот вам код:

Button[,] buttons = new Button[10, 10];
private void CreateItemField(int i, int j, Brush color)
{
    Button button = new Button();
    button.Margin = new Thickness(0.5d);
    button.Background = color;
    button.Name = "btn" + i + j;

    MainGrid.Children.Add(button);
    Grid.SetColumn(button, i);
    Grid.SetRow(button, j);
    buttons[i, j] = button;
}
VladD
  • 206,799