#c# #xaml #xamarin.forms
#c# #xaml #xamarin.forms
Вопрос:
У меня есть StackLayout
с Binding
элементами внутри Grid
макета. stackLayout
Показывает серию объектов, и я бы хотел, чтобы, когда он по горизонтали доходил до конца экрана, объекты продолжали отображать их путем переноса, так просто Label
. Проблема в том, что объекты всегда отображаются для меня только в одной строке, и я не могу видеть их все.
Это мой код:
<StackLayout
Grid.Row="2"
Grid.Column="2"
BindableLayout.ItemsSource="{Binding IconDiaries}"
VerticalOptions="FillAndExpand"
Orientation="Horizontal">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Grid RowSpacing="0.5">
<Grid.RowDefinitions>
<RowDefinition Height="17"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="18"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<BoxView BackgroundColor="Gray" Grid.ColumnSpan="2" Grid.Row="0" CornerRadius="5" Opacity="0.6" />
<Image Grid.Row="0" Grid.Column="0" Source="{Binding isSource}" Margin="3"/>
<Label Grid.Row="0" Grid.Column="1" Text="{Binding id}" TextColor="Black" FontSize="12" VerticalTextAlignment="Center" Margin="0,0,3,0"/>
</Grid>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
Ответ №1:
Что вам нужно, так это обертывание, и оно обеспечивается FlexLayout
Измените эти свойства в соответствии с вашими потребностями Wrap
AlignItems
Direction
JustifyContent
, чтобы получить желаемый результат
<FlexLayout BindableLayout.ItemsSource="{Binding YourItemSource}"
Wrap="Wrap" JustifyContent="Start" Direction="Row" AlignItems="Start" AlignContent="Start">
<BindableLayout.ItemTemplate>
<DataTemplate>
<!-- Your Template -->
</DataTemplate>
</BindableLayout.ItemTemplate>
</FlexLayout>
Еще один пример, который вам поможет
Ответ №2:
stacklayout не может этого достичь, и вы можете использовать collectionview и установить для itemsLayout значение GridLayout