Xamarin formes StackLayout: comment définir la largeur / hauteur des enfants à des pourcentages

y a-t-il un moyen de créer une mise en page verticale de la pile avec un bouton qui prend 30% du parent, et une entrée de texte qui prend 70% du parent? Quelque chose comme ceci:

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

Mais cela ne fonctionne pas. Seule solution jusqu'à présent est de créer un élément de grille complète et en utilisant cela. Il n'y a pas d'autres solutions?

35
demandé sur Brandon Minnick 2015-05-15 01:50:51

2 réponses

StackLayout ne va pas très bien avec des hauteurs variables dans ce scénario. Le moteur Xamarin form n'est pas aussi bien arrondi que le moteur WPF à ce stade. Fondamentalement, vous devez aller

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

de plus, comme note latérale, seules les grilles peuvent s'étendre jusqu'à la pleine largeur ou hauteur de leur élément parent. Stacklayout's déterminer leur taille maximale par la somme de leurs enfants à moins qu'ils ne soient dans une grille et vous mettez HorizontalOptions="Fill" et VerticalOptions="Fill".

la seule autre façon que vous pourriez accomplir ceci est d'obtenir le DeviceHeight et la largeur de L'OS et régler manuellement les hauteurs de vos éléments. Une approche complexe et généralement imparfaite, que je ne recommande pas.

60
répondu Adam Pedley 2016-09-14 01:25:27

alors que vous pouvez le faire avec grid, il y a une disposition plus appropriée pour elle AbsoluteLayout

vous pouvez régler les proportions de position avec ceci: AbsoluteLayout.LayoutBounds=".5,1,.5, de.1"

0
répondu Greensy 2016-09-14 13:02:22