web-dev-qa-db-ja.com

Xamarin Forms StackLayout:子の幅/高さをパーセンテージに設定する方法

親の30%を使用するボタンと、親の70%を使用するテキスト入力を使用して、垂直スタックレイアウトを作成する方法はありますか?このようなもの:

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

しかし、これは機能しません。これまでの唯一の解決策は、完全なグリッドアイテムを作成し、それを使用することです。他に解決策はありませんか?

42
sgarcia.dev

このシナリオでは、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"を配置しない限り、子の合計によって最大サイズを決定します。

これを達成できる唯一の他の方法は、OSからDeviceHeightとWidthを取得し、要素のHeightを手動で設定することです。複雑で通常は欠陥のあるアプローチですが、これはお勧めしません。

68
Adam Pedley

グリッドでこれを行うことができますが、より適切なレイアウトがありますAbsoluteLayout

これで位置の比率を設定できます:AbsoluteLayout.LayoutBounds = "。5,1、.5、.1"

0
Greensy