#xaml #xamarin #xamarin.forms
Вопрос:
Я пытаюсь создать сетку в формах Xamarin с двумя столбцами, каждый из которых занимает половину экрана. Я реализовал свой XAML следующим образом
<Grid VerticalOptions="End" HorizontalOptions="CenterAndExpand" BackgroundColor="#3F4045" Margin="0,0,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="5*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Rectangle Grid.Row="0" Grid.ColumnSpan="2" VerticalOptions="Center" HorizontalOptions="CenterAndExpand" BackgroundColor="#3F4045"/>
<Grid Grid.Row="1">
<Grid Grid.Column="0" HorizontalOptions="Start">
<Frame BackgroundColor="#FCFCFC" CornerRadius="0" Margin="0" Padding="0">
<Entry TextColor="#3F4045" BackgroundColor="#FCFCFC" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand" PlaceholderColor="#3F4045" Placeholder="Last Name, First Name"/>
</Frame>
</Grid>
<Grid Grid.Column="1" HorizontalOptions="Start">
<Frame BackgroundColor="#FCFCFC" CornerRadius="0" Margin="0" Padding="0">
<Button TextColor="#3F4045" BackgroundColor="#FCFCFC" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand" Text="Upload Records"/>
</Frame>
</Grid>
</Grid>
</Grid>
Предполагается, что каждый из двух кадров будет занимать половину второго ряда с небольшим промежутком между ними. Однако при загрузке приложения каждый из них занимает половину первого столбца с небольшим промежутком между ними. Я поэкспериментировал, изменив ширину второго столбца с 5* до 8*, и, как я и ожидал, оба кадра уменьшились настолько, что вместе они занимали 5/13 экрана, а это означает, что на самом деле они оба находятся в первом столбце. Вот фотографии проблемы и тест, который я провел с шириной 5* и 8* для справки:
Есть ли что-то, чего мне не хватает при настройке горизонтальных/вертикальных опций в тегах фреймов или сетки? Спасибо вам за помощь!
Комментарии:
1. почему ваши фреймы вложены в дочерние сетки, а не являются дочерними элементами основной сетки?
2. Ха-ха, это на самом деле оказалось ответом. Я думал использовать теги сетки таким образом с сеткой. Строка и сетка. Столбец ссылался на определения строк и столбцов родительской сетки и был способом назначения дочерних элементов этим строкам и столбцам. Казалось, это сработало для другой страницы моего приложения, где я сделал то же самое и получил желаемый макет, но теперь я собираюсь вернуться и пересмотреть его. Спасибо вам за вашу помощь!
Ответ №1:
Решение состояло в том, чтобы удалить кадры из тегов сетки и сделать их дочерними элементами родительской сетки напрямую, используя сетку.Строка и сетка.Столбец, чтобы назначить их в соответствующие места.
<Grid VerticalOptions="End" HorizontalOptions="CenterAndExpand" BackgroundColor="#3F4045" Margin="0,0,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="5*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Rectangle Grid.Row="0" Grid.ColumnSpan="2" VerticalOptions="Center" HorizontalOptions="CenterAndExpand" BackgroundColor="#3F4045"/>
<Frame Grid.Row="1" Grid.Column="0" BackgroundColor="#FCFCFC" CornerRadius="0" Margin="0" Padding="0">
<Entry TextColor="#3F4045" BackgroundColor="#FCFCFC" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand" PlaceholderColor="#3F4045" Placeholder="Last Name, First Name"/>
</Frame>
<Frame Grid.Row="1" Grid.Column="1" BackgroundColor="#FCFCFC" CornerRadius="0" Margin="0" Padding="0">
<Button TextColor="#3F4045" BackgroundColor="#FCFCFC" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand" Text="Upload Records"/>
</Frame>
</Grid>
Вот обновленный код.