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

sga*_*dev 43 xaml xamarin xamarin.forms

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

<StackLayout Orientation="Vertical">
    <Entry Height="70%"></Entry>
    <Button Height="30%">Click me</Button>
</StackLayout>
Run Code Online (Sandbox Code Playgroud)

但这不起作用.到目前为止,只有解决方案是创建一个完整的Grid项目并使用它.没有其他解决方案吗?

Ada*_*ley 68

在这种情况下,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>
Run Code Online (Sandbox Code Playgroud)

另外,作为旁注,只有网格可以扩展到其父元素的整个宽度或高度.StackLayout通过他们孩子的总和来确定他们的最大大小,除非他们在Grid中并且你放了HorizontalOptions="Fill"VerticalOptions="Fill".

您可以实现此目的的唯一方法是从操作系统获取DeviceHeight和Width并手动设置元素的高度.一种复杂且通常有缺陷的方法,我不建议这样做.

  • 从我写这篇文章(差不多一年前)开始的布局引擎与当前版本大不相同,已经进行了很多改进.版本2.0(我认为)包括大型布局引擎增强功能,我认为它们甚至可以重写它但不确定. (4认同)