Co oznacza * (gwiazdka) w XAML ColumnDefinition?

Jakie jest znaczenie * (gwiazdka) w poniższym XAML?

<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>
Author: Alireza Sattari, 2011-08-05

4 answers

Gdy zdefiniujesz kolumnę w siatce WPF, możesz ustawić szerokość na jedną z trzech możliwych wartości:

  • Stała szerokość,
  • Auto – kolumna stanie się tak szeroka, aby pasowała do jej dzieci, lub
  • * (gwiazdka) zajmuj każdą wolną przestrzeń

* jest poprzedzony liczbą (domyślnie jest to 1, jeśli nie podano liczby). Dostępna przestrzeń jest dzielona między kolumny oznaczone gwiazdką proporcjonalnie do numeru prefiksu.

Jeśli masz to definicja

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

Pierwsza kolumna otrzyma 7% całkowitej dostępnej przestrzeni, a druga kolumna otrzyma 93%. Z drugiej strony, jeśli masz taką definicję:

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

Pierwsza kolumna otrzymałaby 1/3, a druga 2/3 dostępnego miejsca.


W twoim konkretnym przypadku, gdy szerokość siatki wynosi 354, a proporcje dwóch kolumn wynoszą 40 i 314, otrzymujesz następujące szerokości kolumn:

First column width = 40/(40 + 314)*354 = 40
Second coulmn width = 314/(40 + 314)*354 = 314

Szerokość Gwiazdy najlepiej stosować, gdy szerokość siatka nie jest naprawiona. Gdy siatka zostanie zmieniona, kolumny będą skalowane proporcjonalnie zgodnie z szerokościami gwiazd. W Twoim przypadku szerokość siatki jest stała i równie łatwo można było użyć kolumn o stałej szerokości.

Jeśli chcesz mieć układ, w którym druga kolumna ma podwójną szerokość pierwszej, a trzecia ma potrójną szerokość pierwszej, potrzebujesz tej definicji:

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

Jeśli całkowita szerokość siatki wynosi 300, otrzymasz szerokości kolumn 50, 100 i 150. Jeśli Całkowita szerokość siatki wynosi 600 otrzymujesz szerokości kolumn 100, 200 i 300. I tak dalej.

 177
Author: Martin Liversage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-26 07:17:15

Jej stosunek 0,07 do dowolnej innej kolumny o szerokości Gwiazdy-tzn. jeśli inna kolumna ma szerokość 0,14 to kolumna jest dwukrotnie większa od szerokości = jej wszystko o racjach

 3
Author: Dean Chalk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-05 13:14:57

Tworzy rozmiary kolumn za pomocą współczynników. Gdybyś miał inną definicję jak <ColumnDefinition Width="0.03*"/> Pierwsza kolumna zajmowałaby 70% przestrzeni, a druga 30%.

 2
Author: Jakub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-05 13:14:57

[..] wartość wyrażona jako ważona część dostępnej przestrzeni.

 0
Author: H.B.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-05 13:21:44