将按钮对齐到 Xamarin.Forms 网格的底部,不使用 ListView Spacer
Align Buttons to Bottom of Xamarin.Forms Grid without ListView Spacer
我正在开发一个简单的详细信息屏幕,其中提供了一些列表项详细信息和删除项目的选项。它有一个 StackLayout
用于显示项目详细信息和两个 Button
用于返回或删除。
我已经设法将两个 Button
沿其父级 Grid
的底部对齐,方法是使用一个空的 ListView
作为垂直间隔(注意 RowDefinition.Height
对于 ListView
的 Grid.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>
我正在开发一个简单的详细信息屏幕,其中提供了一些列表项详细信息和删除项目的选项。它有一个 StackLayout
用于显示项目详细信息和两个 Button
用于返回或删除。
我已经设法将两个 Button
沿其父级 Grid
的底部对齐,方法是使用一个空的 ListView
作为垂直间隔(注意 RowDefinition.Height
对于 ListView
的 Grid.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>