Подтвердить что ты не робот

Xamarin Forms StackLayout: как установить ширину/высоту детей в процентах

Есть ли способ создать вертикальный макет стека с кнопкой, которая занимает 30% от родительского, и текстовый ввод, который занимает 70% от родительского? Что-то вроде этого:

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

Но это не работает. До сих пор единственным решением является создание полного элемента Grid и его использование. Нет ли других решений?

4b9b3361

Ответ 1

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".

Единственный способ, которым вы могли бы это сделать, - получить DeviceHeight и Width из ОС и вручную установить высоты ваших элементов. Сложный и обычно ошибочный подход, который я не рекомендую.

Ответ 2

Пока вы можете сделать это с помощью сетки, для этого есть более подходящий макет AbsoluteLayout

Вы можете установить пропорции позиции следующим образом: AbsoluteLayout.LayoutBounds = ". 5,1, 0,5, 0,1"