Xamarin Forms StackLayout:如何将子项的宽度/高度设置为百分比

Xamarin Forms StackLayout: How to set width / height of children to percentages

有没有办法创建一个垂直堆栈布局,其中按钮占父级的 30%,文本输入占父级的 70%?像这样:

<StackLayout Orientation="Vertical">
    <Entry Height="70%"></Entry>
    <Button Height="30%">Click me</Button>
</StackLayout>

但这行不通。到目前为止唯一的解决方案是创建一个完整的网格项目并使用它。没有其他解决方案吗?

在这种情况下,StackLayout 不能很好地适应不同的高度。在这一点上,Xamarin Forms 引擎不如 WPF 引擎全面。基本上你得去

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="7*" />
        <RowDefinition Height="3*" />
    </Grid.RowDefinitions>
    <Entry Grid.Row="0" VerticalOptions="Fill"></Entry>
    <Button Grid.Row="1" VerticalOptions="Fill">Click me</Button>
</Grid>

另请注意,只有网格可以扩展到其父元素的全宽或全高。 StackLayout 由其子项的总和确定其最大大小,除非它们在 Grid 中并且您放置 HorizontalOptions="Fill"VerticalOptions="Fill".

完成此操作的唯一其他方法是从 OS 获取 DeviceHeight 和 Width 并手动设置元素的高度。一种复杂且通常有缺陷的方法,我不推荐。

虽然您可以使用网格来做到这一点,但还有更适合它的布局 绝对布局

您可以设置排名比例: AbsoluteLayout.LayoutBounds=".5,1,.5,.1"