Quelle est la signification de * (astérisque) dans XAML ColumnDefinition?

106

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>
Shashank
la source
si ma deuxième largeur de colonne est le double de la première et la troisième largeur de colonne est triple de la première, alors comment puis-je utiliser Astrik
Shashank

Réponses:

168

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 tout l'espace restant disponible

Le *est précédé d'un nombre (la valeur par défaut est 1 si aucun nombre n'est spécifié). L'espace disponible est divisé entre les colonnes étoilées 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 obtiendrait 1/3 et la seconde 2/3 de l'espace disponible.


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

Largeur de la première colonne = 40 / (40 + 314) * 354 = 40
Deuxième largeur de coulmn = 314 / (40 + 314) * 354 = 314

La largeur de l'étoile est mieux utilisée lorsque la largeur de la grille n'est pas fixe. Lorsque la grille est redimensionnée, les colonnes seront alors mises à l'échelle proportionnellement comme spécifié par les largeurs d'étoile. Dans votre cas, la largeur de la grille est fixe et vous pourriez tout aussi bien avoir utilisé des colonnes à 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 de 300, vous obtenez des largeurs de colonne de 50, 100 et 150. Si la largeur totale de la grille est de 600, vous obtenez des largeurs de colonne de 100, 200 et 300. Et ainsi de suite.

Martin Liversage
la source
3

Son rapport de 0,07 par rapport à toute autre colonne de largeur en étoile - c'est-à-dire si une autre définition de colonne a une largeur de 0,14, cette colonne est le double de la largeur = tout est question de rations

Dean Chalk
la source
1

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 prendrait 70% de l'espace et la seconde prendrait 30%.

Jakub
la source
0

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

HB
la source