Как я могу создать Grid в UWP, который изменяется во время выполнения вместе с 2D-массивом? - PullRequest
0 голосов
/ 07 марта 2020

Я создаю приложение для настольных игр с UWP и C#. В настоящее время моя доска определяется как двумерный массив, который растет по мере размещения плиток. Я бы хотел иметь сетку, которая росла вместе с массивом. Я также хотел, чтобы пустые места в сетке определялись как кнопки, позволяющие размещать плитку в сетке одним щелчком мыши.

Я пытался использовать этот метод в коде бэкэнда на основе ответа, который я видел на эта ссылка но я не думаю, что делаю все правильно.

public Grid GridGenerator(int rows, int cols, int[,] map)
    {
        Grid grid = new Grid();
        grid.Margin = new Thickness(50, 50, 50, 50);
        grid.Background = new SolidColorBrush(Windows.UI.Colors.Brown);
        grid.HorizontalAlignment = HorizontalAlignment.Center;
        grid.VerticalAlignment = VerticalAlignment.Center;

        for (int i = 0; i < rows; i++)
        {
            RowDefinition Row = new RowDefinition();
            Row.Height = new GridLength(0, GridUnitType.Auto);
            grid.RowDefinitions.Add(Row);

            for (int j = 0; j < cols; j++)
            {
                ColumnDefinition column = new ColumnDefinition();
                column.Width = new GridLength(0, GridUnitType.Auto);
                grid.ColumnDefinitions.Add(column);
                if (map[i, j] == 0)
                {
                    Button button = new Button();
                    button.MinHeight = 30;
                    button.MinWidth = 30;
                    button.Background = new SolidColorBrush(Windows.UI.Colors.AliceBlue);
                    button.Name = i.ToString() + j.ToString();
                    grid.Children.Add(button);
                    Grid.SetColumn(button, j);
                }
                else
                {
                    TextBlock text = new TextBlock();
                    text.Text = map[i, j].ToString();
                    text.HorizontalTextAlignment = (TextAlignment)HorizontalAlignment.Center;
                    text.HorizontalAlignment = HorizontalAlignment.Center;
                    text.VerticalAlignment = VerticalAlignment.Center;
                    grid.Children.Add(text);
                    Grid.SetColumn(text, j);
                }
            }
        }

1 Ответ

1 голос
/ 08 марта 2020

Кажется, вы добавляете слишком много ColumnDefinitions через вложенный l oop. Попробуйте написать каждый шаг отдельно, чтобы вы могли * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 100 * * * * * * * * * * * * * * * Как отобразить сетку, сгенерированную в коде: Чтобы отобразить ее, вам нужно положить его в дерево XAML. Например, если вы хотите показать его в другой таблице (с именем "Layout Root") на странице XAML,

<Grid x:Name="LayoutRoot"></Grid>

добавьте ее в Layout Root .Children в коде позади.

Grid board_grid = GridGenerator(5, 5, map);
LayoutRoot.Children.Add(board_grid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...