Was bedeutet * (Sternchen) in XAML ColumnDefinition?

106

Was bedeutet * (Sternchen) in der XAML unten?

<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
quelle
Wenn meine zweite Spaltenbreite das Doppelte der ersten und die dritte Spaltenbreite das Dreifache der ersten ist, wie kann ich dann Astrik
Shashank verwenden

Antworten:

168

Wenn Sie eine Spalte in einem WPF-Raster definieren, können Sie die Breite auf einen von drei möglichen Werten festlegen:

  • Eine feste Breite,
  • Auto - Die Säule wird so breit wie nötig, um ihren Kindern zu passen, oder
  • * (Stern) belegen den verfügbaren Platz

Dem *wird eine Nummer vorangestellt (Standard ist 1, wenn keine Nummer angegeben ist). Der verfügbare Speicherplatz wird proportional zur Präfixnummer auf die markierten Spalten aufgeteilt.

Wenn Sie diese Definition haben

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

Die erste Spalte erhält 7% des gesamten verfügbaren Speicherplatzes und die zweite Spalte 93%. Auf der anderen Seite, wenn Sie diese Definition hatten:

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

Die erste Spalte würde 1/3 und die zweite 2/3 des verfügbaren Speicherplatzes erhalten.


In Ihrem speziellen Fall, in dem die Breite des Rasters 354 beträgt und die Proportionen der beiden Spalten 40 und 314 betragen, erhalten Sie die folgenden Spaltenbreiten:

Breite der ersten Spalte = 40 / (40 + 314) * 354 = 40
Zweite Coulmn-Breite = 314 / (40 + 314) * 354 = 314

Die Sternbreite wird am besten verwendet, wenn die Breite des Gitters nicht festgelegt ist. Wenn die Größe des Rasters geändert wird, werden die Spalten proportional skaliert, wie durch die Sternbreiten angegeben. In Ihrem Fall ist die Breite des Rasters fest und Sie hätten genauso gut Spalten mit fester Breite verwenden können.

Wenn Sie ein Layout wünschen, bei dem die zweite Spalte doppelt so breit ist wie die erste und die dritte Spalte dreimal so breit wie die erste, benötigen Sie diese Definition:

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

Wenn die Gesamtbreite des Gitters 300 beträgt, erhalten Sie die Spaltenbreiten 50, 100 und 150. Wenn die Gesamtbreite des Gitters 600 beträgt, erhalten Sie die Spaltenbreiten 100, 200 und 300. Und so weiter.

Martin Liversage
quelle
3

Das Verhältnis von 0,07 zu jeder anderen Spalte mit Sternbreite - dh wenn eine andere ColomnDefinition eine Breite von 0,14 hat, ist diese Spalte doppelt so breit wie die Breite = alles dreht sich um Rationen

Dean Chalk
quelle
1

Es werden Spaltengrößen mithilfe von Verhältnissen erstellt. Wenn Sie eine andere Definition wie <ColumnDefinition Width="0.03*"/>die erste Spalte hätten, würde diese 70% des Speicherplatzes und die zweite 30% des Speicherplatzes einnehmen.

Jakub
quelle
0

[..] ein Wert, der als gewichteter Anteil des verfügbaren Speicherplatzes ausgedrückt wird.

HB
quelle