Как настроить определения строк / столбцов в Xamarin.Forms Xaml?

#grid #xamarin #xamarin.forms

#сетка #xamarin #xamarin.forms

Вопрос:

Мне удалось настроить строки и столбцы из кода, но не удалось перенести эти настройки в xaml:

 grid.RowDefinitions = new RowDefinitionCollection { 
    new RowDefinition { Height = new GridLength(1, GridUnitType.Star) } 
};
grid.ColumnDefinitions = new ColumnDefinitionCollection { 
    new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) } 
};
  

Следующее не работает:

 <Grid x:Name="grid" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
    <Grid.RowDefinitions>
      <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    ...
</Grid>
  

Из документации мне удалось получить только реализацию c #

Комментарии:

1. Можете ли вы определить «это не работает»? Ваш xaml выглядит корректно, и это правильный способ сделать это.

2. это не дает всего пространства экрана для содержимого сетки с row = 0 и col = 0 . Поскольку вместо этого содержимое смещается в верхний левый угол формы. Хотя, если я использую определение из code — if, оно работает, и оно предоставляет все пространство для внутренних элементов управления, которые идут в центр

3. эта вещь должна работать. можете ли вы опубликовать более полный пример, код и xaml того, что вы делаете. спасибо

Ответ №1:

Я также получаю такое же поведение (не заполняется и не расширяется) для сетки с одной ячейкой (1 строка / столбец, хотя я не уверен, зачем нам вообще нужна сетка с одной ячейкой во весь экран), но, похоже, она отлично работает для 2 x 2,сетка размером 3 x 3 ячейки (другие еще не пробовали).

Атрибуты Height =»» и Width =»» требуются в формах Xamarin, хотя я «думаю», что они не нужны в WPF, поскольку по умолчанию предполагается, что это так.

  <ContentPage.Content>
    <Grid VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
    <Grid.RowDefinitions>
    <RowDefinition Height="*"></RowDefinition>
    <RowDefinition Height="*"></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"></ColumnDefinition>
    <ColumnDefinition Width="*"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <Button Grid.Row="0" Grid.Column="0" Text="1"></Button>
    <Button Grid.Row="1" Grid.Column="1" Text="2"></Button>
    </Grid>
</ContentPage.Content>
  

Ответ №2:

Вот пример

 <Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="*" />
    <RowDefinition Height="*" />
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="*" />
  </Grid.ColumnDefinitions>
  <Label Text="Top Left" Grid.Row="0" Grid.Column="0" />
  <Label Text="Top Right" Grid.Row="0" Grid.Column="1" />
  <Label Text="Bottom Left" Grid.Row="1" Grid.Column="0" />
  <Label Text="Bottom Right" Grid.Row="1" Grid.Column="1" />
</Grid>