Получить количество ячеек на панели Grid и получить к ним доступ - PullRequest
0 голосов
/ 26 июня 2018

Можно ли узнать количество ячеек в сетке? Могу ли я как-нибудь получить к ним доступ, чтобы присоединить ребенка к каждому из них?

Например, если у меня есть 2 строки х 3 столбца Сетка:

<Grid Name="myGrid">
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>

    <Grid Grid.Row="0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
    </Grid>

   <Grid Grid.Row="1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
    </Grid>
</Grid>

Я пробовал что-то вроде:

foreach (RowDefinition row in this.myGrid.RowDefinitions)
{
    foreach(ColumnDefinition col in row)
    {
        // This doesn't work.
        // There is no property ColumnDefinitions in row.
    }
}

Я не могу понять, как этого добиться (если возможно).

1 Ответ

0 голосов
/ 26 июня 2018

RowDefinitions и ColumnDefinitions принадлежат Grid, и они независимы друг от друга.

исправление определения xaml для создания сетки 2x3 (вместо текущих сеток 2x1, 1x3, 1x3)

<Grid Name="myGrid">
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>

    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
</Grid>

Ячейки сетки не представлены никаким контролем. Это просто прямоугольные области в сетке, определяемые во время аранжировки. Используйте Grid.RowProperty и Grid.ColumnProperty присоединенный DP для позиционирования дочерних элементов в Grid:

for(int r = 0; r < myGrid.RowDefinitions.Count; r++)
{
    for(int c = 0; c < myGrid.ColumnDefinitions.Count; c++)
    {
        var B = new Border { Margin = new Thickness(5), Background = Brushes.Green };
        B.SetValue(Grid.RowProperty, r);
        B.SetValue(Grid.ColumnProperty, c);
        myGrid.Children.Add(B);
    }
}

если все ячейки имеют одинаковый размер, вы можете использовать UniformGrid:

<UniformGrid Name="myGrid" Rows="2" Columns="3"/>

for(int r = 0; r < myGrid.Rows; r++)
{
    for(int c = 0; c < myGrid.Columns; c++)
    {
        var B = new Border { Margin = new Thickness(5), Background = Brushes.Green };
        myGrid.Children.Add(B);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...