Xaml 表单中心列表视图项

Xaml 表单中心列表视图项,xaml,xamarin.forms,Xaml,Xamarin.forms,如何在Xamarin.Forms应用程序中居中显示listview项目? listview项当前是左对齐的。 我想让它们居中对齐 我有以下代码: <ListView Grid.Row="1" Grid.Column="0" ItemsSource="{Binding Results}" HorizontalOptions="Center"> <ListView.ItemTemplate> <DataTemplate&g

如何在Xamarin.Forms应用程序中居中显示listview项目? listview项当前是左对齐的。 我想让它们居中对齐

我有以下代码:

    <ListView Grid.Row="1" Grid.Column="0" ItemsSource="{Binding Results}" HorizontalOptions="Center">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <ViewCell.View>
                        <Grid HorizontalOptions="Center">
                            <Grid.RowDefinitions>
                                <RowDefinition />
                            </Grid.RowDefinitions>

                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="auto" />
                                <ColumnDefinition Width="auto" />
                            </Grid.ColumnDefinitions>

                            <Label Grid.Row="0" Grid.Column="0" Text="{Binding FirstName}" />
                            <Label Grid.Row="0" Grid.Column="1" Text="{Binding LastName}" />
                        </Grid>
                    </ViewCell.View>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

也许这样:

<Label Grid.Row="0" Grid.Column="0" Text="{Binding FirstName}" HorizontalOptions="Center"/>
<Label Grid.Row="0" Grid.Column="1" Text="{Binding LastName}" HorizontalOptions="Center"/>

编辑:

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="5*" />
  <ColumnDefinition Width="5*" />
</Grid.ColumnDefinitions>

<Label Grid.Row="0" Grid.Column="0" Text="{Binding FirstName}" HorizontalOptions="Center"/>
<Label Grid.Row="0" Grid.Column="1" Text="{Binding LastName}" HorizontalOptions="Center"/>

也许这样:

<Label Grid.Row="0" Grid.Column="0" Text="{Binding FirstName}" HorizontalOptions="Center"/>
<Label Grid.Row="0" Grid.Column="1" Text="{Binding LastName}" HorizontalOptions="Center"/>

编辑:

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="5*" />
  <ColumnDefinition Width="5*" />
</Grid.ColumnDefinitions>

<Label Grid.Row="0" Grid.Column="0" Text="{Binding FirstName}" HorizontalOptions="Center"/>
<Label Grid.Row="0" Grid.Column="1" Text="{Binding LastName}" HorizontalOptions="Center"/>

没有实际尝试过

您的单元格视图是
,但网格本身已展开以适合单元格,因此
水平选项
不重要

你需要在网格中放置一个二级容器,它将居中, 比如:

<ViewCell.View>
  <Grid>
    <StackPanel Orientation="Horizontal" HorizontalOptions="Center"> 
      <Label Grid.Row="0" Grid.Column="0" Text="{Binding FirstName}" />
      <Label Grid.Row="0" Grid.Column="1" Text="{Binding LastName}" />
    </StackPanel>
  </Grid>
</ViewCell.View>


您还可以尝试(如果上述操作不起作用)将3列(以及3行用于垂直对齐)添加到大小为(自动)-(*)-(自动)的网格中,并将StackPanel放在中心单元格中。

,而无需实际尝试

您的单元格视图是
,但网格本身已展开以适合单元格,因此
水平选项
不重要

你需要在网格中放置一个二级容器,它将居中, 比如:

<ViewCell.View>
  <Grid>
    <StackPanel Orientation="Horizontal" HorizontalOptions="Center"> 
      <Label Grid.Row="0" Grid.Column="0" Text="{Binding FirstName}" />
      <Label Grid.Row="0" Grid.Column="1" Text="{Binding LastName}" />
    </StackPanel>
  </Grid>
</ViewCell.View>


您还可以尝试(如果上述操作不起作用)向网格中添加3列(和3行用于垂直对齐),大小为(自动)-(*)-(自动),并将StackPanel放在中心单元格中。

Scott网格始终会扩展以占据100%的可用空间。就我所知,没有办法覆盖它,即使在网格上显式设置widthrequest似乎也没有帮助

我假设您有一个更大的布局要求,您试图满足,因为在listView中以名字和姓氏为中心,最好使用Stacklayout而不是网格来完成。 即


但是假设你真的需要一个网格,那么我只能为Tomasz的建议增加一个

<Grid>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition />
<ColumnDefinition/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="1" Text="{Binding FirstName}" HorizontalOptions="End"/>
<Label Grid.Row="0" Grid.Column="2" Text="{Binding LastName}" />
</Grid>


这会在外部创建两列以占用空间,迫使名称位于中间。

网格始终会扩展以占据100%的可用空间。就我所知,没有办法覆盖它,即使在网格上显式设置widthrequest似乎也没有帮助

我假设您有一个更大的布局要求,您试图满足,因为在listView中以名字和姓氏为中心,最好使用Stacklayout而不是网格来完成。 即


但是假设你真的需要一个网格,那么我只能为Tomasz的建议增加一个

<Grid>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition />
<ColumnDefinition/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="1" Text="{Binding FirstName}" HorizontalOptions="End"/>
<Label Grid.Row="0" Grid.Column="2" Text="{Binding LastName}" />
</Grid>


这将在外部创建两列,以占用空间,迫使名称位于中间。

只需在标签上添加HorizontalOptions=“Center”就可以了,祝我好运

<ListView Grid.Row="1" Grid.Column="0" ItemsSource="{Binding Results}" HorizontalOptions="Center">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <ViewCell.View>
                    <Grid HorizontalOptions="Center">
                        <Grid.RowDefinitions>
                            <RowDefinition />
                        </Grid.RowDefinitions>

                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="auto" />
                            <ColumnDefinition Width="auto" />
                        </Grid.ColumnDefinitions>

                        <Label HorizontalOptions="Center" Grid.Row="0" Grid.Column="0" Text="{Binding FirstName}" />
                        <Label HorizontalOptions="Center" Grid.Row="0" Grid.Column="1" Text="{Binding LastName}" />
                    </Grid>
                </ViewCell.View>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

只需在标签上添加horizontalpoptions=“Center”就行了,祝我好运

<ListView Grid.Row="1" Grid.Column="0" ItemsSource="{Binding Results}" HorizontalOptions="Center">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <ViewCell.View>
                    <Grid HorizontalOptions="Center">
                        <Grid.RowDefinitions>
                            <RowDefinition />
                        </Grid.RowDefinitions>

                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="auto" />
                            <ColumnDefinition Width="auto" />
                        </Grid.ColumnDefinitions>

                        <Label HorizontalOptions="Center" Grid.Row="0" Grid.Column="0" Text="{Binding FirstName}" />
                        <Label HorizontalOptions="Center" Grid.Row="0" Grid.Column="1" Text="{Binding LastName}" />
                    </Grid>
                </ViewCell.View>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>


这没有用,因为两列的大小都是“自动”的,所以第一列的大小总是第一个名称标签的大小,第二列的大小是其余的。这没有用,因为两列的大小都是“自动”的,所以第一列的大小总是第一个名称标签的大小,第二列的大小是其余的。