it-swarm.com.ru

Xamarin Forms StackLayout: Как установить ширину/высоту дочерних элементов в процентах

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

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

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

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

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

65
Adam Pedley

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

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

0
Greensy