2016-05-27 4 views
0

Est-il possible de réaliser la mise en page suivante dans Xamarin Forms:Xamarin Formulaires - Réaliser 2 colonnes avec des paires étiquette/valeur

enter image description here

Quelques notes:

  1. Idéalement je vous voulez qu'une valeur puisse être envelopper sur 2 lignes - auquel cas la ligne entière deviendra plus grande (ligne signifiant étiquette 1, valeur 1, étiquette 2, valeur 2).
  2. La grille() a known issues with word wrap.
+0

qui ressemble à une grille pour me – Jason

+0

@ Jason - J'ai mis à jour la question. – jbyrd

+0

Pouvez-vous élaborer sur les problèmes connus avec l'encapsulation de mots Grid? –

Répondre

3

Je ne sais pas pourquoi vous pensez que la grille a des problèmes d'emballage de mots. J'ai utilisé la grille dans plusieurs de mes applications exactement pour ce scénario. Voici le code.

<Grid 
    ColumnSpacing="10" 
    RowSpacing="10" 
    HorizontalOptions="FillAndExpand" 
    VerticalOptions="Start"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="50"/> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 
    <Label 
     Grid.Row="0" 
     Grid.Column="0" 
     Text="label 1:" 
     FontAttributes="Bold" 
     HorizontalOptions="Start"/> 
    <Label 
     Grid.Row="0" 
     Grid.Column="1" 
     Text="value 1"/> 

    <Label 
     Grid.Row="0" 
     Grid.Column="3" 
     Text="label 2:" 
     FontAttributes="Bold" 
     HorizontalOptions="Start"/> 
    <Label 
     Grid.Row="0" 
     Grid.Column="4" 
     Text="value 2 is very very infinitely long and can potentially wrap to many many lines"/> 

    <Label 
     Grid.Row="1" 
     Grid.Column="0" 
     Text="label 3:" 
     FontAttributes="Bold" 
     HorizontalOptions="Start"/> 
    <Label 
     Grid.Row="1" 
     Grid.Column="1" 
     Text="value 3"/> 

    <Label 
     Grid.Row="1" 
     Grid.Column="3" 
     Text="label 4:" 
     FontAttributes="Bold" 
     HorizontalOptions="Start"/> 
    <Label 
     Grid.Row="1" 
     Grid.Column="4" 
     Text="value 4 goes here"/> 

    <Label 
     Grid.Row="2" 
     Grid.Column="0" 
     Text="label 5:" 
     FontAttributes="Bold" 
     HorizontalOptions="Start"/> 
    <Label 
     Grid.Row="2" 
     Grid.Column="1" 
     Text="value 5"/> 

    <Label 
     Grid.Row="2" 
     Grid.Column="3" 
     Text="label 6:" 
     FontAttributes="Bold" 
     HorizontalOptions="Start"/> 
    <Label 
     Grid.Row="2" 
     Grid.Column="4" 
     Text="value 6 here"/> 

    </Grid> 

Et voici des captures d'écran pour iOS et Android

enter image description here

+0

Mais dans cet exemple, la première colonne (étiquette 1/valeur 1, étiquette 3/valeur 3, étiquette 5/valeur 5) occupe-t-elle 50% de la largeur? (J'ai modifié ma capture d'écran pour rendre cette exigence plus claire.) Il semble que vous «trichez» en ajoutant une largeur de 50 à une colonne du milieu pour donner l'impression que la première colonne s'étend à mi-chemin. – jbyrd

+0

Dans ce cas, vous devez avoir une grille parentale avec deux colonnes dont la largeur est définie sur "*", et dans chacune de ces colonnes une autre grille avec les étiquettes. mais l'approche est la même. – kyurkchyan

+0

Dans ce cas, les largeurs d'étiquettes (de l'étiquette 1/3/5 et de l'étiquette 2/4/6) ne seront pas alignées. Je suis peut-être prêt à accepter cette solution - dans mon cas, il peut être acceptable de définir une largeur pour les étiquettes (pas de valeurs, juste des étiquettes). C'est essentiellement ce que je faisais auparavant, mais au lieu d'utiliser des grilles à l'intérieur de la grille principale, j'utilisais stacklayouts dans la grille principale, avec une orientation horizontale de sorte que vous ayez l'étiquette à gauche et la valeur à droite. Mais c'est là que je courais dans les problèmes de retour à la ligne (peut-être un stacklayout dans une grille est le problème?) – jbyrd