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

时间:2015-05-14 22:50:51

标签: xaml xamarin xamarin.forms

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

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

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

2 个答案:

答案 0 :(得分:67)

在这种情况下,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根据他们孩子的总和来确定他们的最大尺寸,除非他们在网格中并且您放置了HorizontalOptions="Fill"VerticalOptions="Fill"

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

答案 1 :(得分:0)

虽然您可以使用网格执行此操作,但它有更合适的布局 AbsoluteLayout

您可以使用以下方法设置位置比例: AbsoluteLayout.LayoutBounds =&#34; .5,1,0.5,0.1&#34;