将按钮对齐到 Xamarin.Forms 网格的底部,不使用 ListView Spacer

Align Buttons to Bottom of Xamarin.Forms Grid without ListView Spacer

我正在开发一个简单的详细信息屏幕,其中提供了一些列表项详细信息和删除项目的选项。它有一个 StackLayout 用于显示项目详细信息和两个 Button 用于返回或删除。

我已经设法将两个 Button 沿其父级 Grid 的底部对齐,方法是使用一个空的 ListView 作为垂直间隔(注意 RowDefinition.Height对于 ListViewGrid.Row 设置为 *):

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <StackLayout>
        <Label Text="{Binding TextLabel}" FontSize="Medium" />
        <Label Text="{Binding Text}" FontSize="Small" />
        <Label Text="{Binding DescriptionLabel}" FontSize="Medium" />
        <Label Text="{Binding Description}" FontSize="Small" />
    </StackLayout>
    <ListView Grid.Row="1" />
    <Grid Grid.Row="2">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Button
            Text="{Binding BackButton}"
            Command="{Binding BackCommand}" />
        <Button
            Grid.Column="1"
            Text="{Binding DeleteButton}"
            Command="{Binding DeleteCommand}"/>
    </Grid>
</Grid>

虽然这有效,但感觉像是在滥用 ListView。理想情况下,我想完全删除 <ListView Grid.Row="1" />,并让第一行中的 StackLayout 尽可能展开,以便将最后一行中的 Button Grid 推到一边一直到屏幕底部。我想我也可以接受 Button Grid 向上扩展,如果 StackLayout 无法扩展的话。

如此短小精悍,我怎样才能摆脱虚假的 ListView 间隔符,同时让我的 Button 仍然位于屏幕底部?

您可以像下面这样更改代码。我在没有列表视图的情况下进行了测试。

变化:

<Grid Grid.Row="2">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Button
        Text="{Binding BackButton}"
        Command="{Binding BackCommand}" />
    <Button
        Grid.Column="1"
        Text="{Binding DeleteButton}"
        Command="{Binding DeleteCommand}"/>
</Grid>

收件人:

 <StackLayout
        Grid.Row="1"
        Orientation="Horizontal"
        VerticalOptions="End">
        <Button HorizontalOptions="StartAndExpand"  Text="{Binding BackButton}" Command="{Binding BackCommand}" />
        <Button HorizontalOptions="EndAndExpand" Text="{Binding DeleteButton}" Command="{Binding DeleteCommand}"/>
    </StackLayout>