web-dev-qa-db-fra.com

Signification de * (astérisque) dans un WPF ColumnDefinition?

Quelle est la signification de * (astérisque) dans le XAML ci-dessous?

<ColumnDefinition Width="0.07*"/>
<Grid Height="100" HorizontalAlignment="Left" 
      Margin="102,134,0,0" 
      Name="grid1" VerticalAlignment="Top" 
      Width="354">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="40*" />
        <ColumnDefinition Width="314*" />
    </Grid.ColumnDefinitions>
</Grid>
99
Shashank

Lorsque vous définissez une colonne dans une grille WPF, vous pouvez définir la largeur sur l'une des trois valeurs possibles:

  • Une largeur fixe,
  • Auto - la colonne deviendra aussi large que nécessaire pour s'adapter à ses enfants, ou
  • * (étoile) occupe toute la place disponible

Le * est préfixé par un nombre (la valeur par défaut est 1 si aucun nombre n'est spécifié). L'espace disponible est divisé entre les colonnes suivies proportionnellement au numéro de préfixe.

Si vous avez cette définition

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="0.07*"/>
  <ColumnDefinition Width="0.93*"/>
</Grid.ColumnDefinitions>

La première colonne obtiendra 7% de l'espace total disponible et la deuxième colonne, 93%. Par contre si vous aviez cette définition:

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="0.07*"/>
  <ColumnDefinition Width="0.14*"/>
</Grid.ColumnDefinitions>

La première colonne aurait 1/3 et la seconde 2/3 de l'espace disponible.


Dans votre cas spécifique où la largeur de la grille est 354 et les proportions des deux colonnes 40 et 314, vous obtenez les largeurs de colonne suivantes:

 Première colonne = 40/(40 + 314) * 354 = 40 
 Deuxième largeur de colonne = 314/(40 + 314) * 354 = 314 

La largeur de l'étoile est mieux utilisée lorsque la largeur de la grille n'est pas fixée. Lorsque la grille est redimensionnée, les colonnes sont mises à l'échelle proportionnellement, comme indiqué par les largeurs d'étoile. Dans votre cas, la largeur de la grille est fixe et vous auriez tout aussi bien pu utiliser des colonnes de largeur fixe.

Si vous voulez une mise en page où la deuxième colonne est le double de la largeur de la première et la troisième colonne est le triple de la largeur de la première, vous avez besoin de cette définition:

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="*"/>
  <ColumnDefinition Width="2*"/>
  <ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>

Si la largeur totale de la grille est 300, vous obtenez les largeurs de colonne 50, 100 et 150. Si la largeur totale de la grille est 600, vous obtenez les largeurs de colonne 100, 200 et 300. Et ainsi de suite.

155
Martin Liversage

Son rapport de 0,07 à toute autre colonne de largeur étoilée - c’est-à-dire si une autre ColomnDefinition a une largeur de 0,14, cette colonne est le double de la largeur = elle est tout à fait rationnelle

2
Dean Chalk

Il crée des tailles de colonne à l'aide de ratios. Si vous aviez une autre définition comme <ColumnDefinition Width="0.03*"/> la première colonne occuperait 70% de l’espace et la seconde 30%.

1
Jakub

[..] une valeur exprimée en proportion pondérée de l'espace disponible.

0
H.B.