web-dev-qa-db-fra.com

Xamarin Forms StackLayout: comment définir la largeur/hauteur des enfants en pourcentage

Existe-t-il un moyen de créer une disposition de pile verticale avec un bouton représentant 30% du parent et une saisie de texte représentant 70% du parent? Quelque chose comme ça:

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

Mais ça ne marche pas. Jusqu'à présent, la seule solution consiste à créer un élément de grille complet et à l'utiliser. N'y a-t-il pas d'autres solutions?

38
sgarcia.dev

StackLayout ne va pas très bien avec des hauteurs variables dans ce scénario. Les moteurs Xamarin Forms ne sont pas aussi complets 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, en tant que note latérale, seules les grilles peuvent s’étendre sur toute la largeur ou la hauteur de leur élément parent. Les StackLayout déterminent leur taille maximale par la somme de leurs enfants, sauf s'ils se trouvent dans une grille et que vous mettez HorizontalOptions="Fill" et VerticalOptions="Fill".

La seule autre façon de procéder consiste à extraire DeviceHeight et Width du système d'exploitation et à définir manuellement la hauteur de vos éléments. Une approche complexe et généralement imparfaite, ce que je ne recommande pas.

65
Adam Pedley

Bien que vous puissiez le faire avec une grille, sa mise en page est plus appropriée AbsoluteLayout 

Vous pouvez définir les proportions de position avec ceci: AbsoluteLayout.LayoutBounds = ". 5,1, .5, .1"

0
Greensy