Xamarin.Forms布局问题

时间:2017-05-04 10:31:12

标签: xaml listview xamarin.android xamarin.forms

我试图在Xamarin.Forms中生成一个简单的表单,它将显示带有自定义标题的ListView(允许数据输入)和自定义页脚(包含"取消" /"继续&# 34;按钮)。然而,我不能让ListView垂直填充表单(我想要"取消" /"继续"表格底部的按钮,无论列表的长度如何。

我哪里错了?我已经尝试了针对ListView的几乎所有VerticalOptions组合,但我总是最终得到"取消" /"继续"直接坐在" OK"按钮...

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage x:Class="MyCompany.Views.MyPage"
                         xmlns="http://xamarin.com/schemas/2014/forms"
                         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                         Title="{Binding Path=Title}">

    <ListView Margin="15" VerticalOptions="FillAndExpand">

        <ListView.HeaderTemplate>
            <DataTemplate>

                <StackLayout VerticalOptions="Start">
                    <Label HorizontalTextAlignment="Center" Text="Type something" />
                    <Entry />
                    <Button HorizontalOptions="Center" Text="Ok" />
                </StackLayout>

            </DataTemplate>
        </ListView.HeaderTemplate>

        <ListView.FooterTemplate>
            <DataTemplate>

                <Grid VerticalOptions="End">

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

                    <Button Grid.Column="1" Text="Cancel" />
                    <Button Grid.Column="3" Text="Complete" />

                </Grid>

            </DataTemplate>
        </ListView.FooterTemplate>

    </ListView>

</ContentPage>

为了记录,应用程序正在Android上运行(当前),但我不希望这会产生任何影响。

1 个答案:

答案 0 :(得分:2)

我无法使用页眉和页脚完成任务。或者你也可以将它包装在一个Grid中,如下所示:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <StackLayout Grid.Row="0" VerticalOptions="Start">
        <Label HorizontalTextAlignment="Center" Text="Type something" />
        <Entry />
        <Button HorizontalOptions="Center" Text="Ok" />
    </StackLayout>
    <ListView Grid.Row="1" ItemsSource="{Binding .}" Margin="15" VerticalOptions="FillAndExpand" />
    <Grid Grid.Row="2" VerticalOptions="End" HeightRequest="40">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="2*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="2*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <Button Grid.Column="1" Text="Cancel" />
        <Button Grid.Column="3" Text="Complete" />
    </Grid>
</Grid>

更新:我在ListView注意到的行为是,它将页脚直接放在ListView的最后一项之后。因此,如果您的ListView只有4个项目,则会将标题直接放在其后面。尝试给页脚和ListView背景颜色,你可能会看到这样的东西:

enter image description here

我认为如果不按照我建议的网格路线就可以改变这种行为。