Jakie jest znaczenie * (gwiazdka) w XAML ColumnDefinition?

106

Jakie jest znaczenie znaku * (gwiazdka) w poniższym kodzie 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>
Shashank
źródło
jeśli moja druga szerokość kolumny jest dwukrotnie większa niż szerokość pierwszej i trzecia kolumna jest trzykrotnie większa niż pierwsza, to Jak mogę używać Astrik
Shashank

Odpowiedzi:

168

Podczas definiowania kolumny w siatce WPF można ustawić szerokość na jedną z trzech możliwych wartości:

  • Stała szerokość,
  • Auto - kolumna stanie się tak szeroka, jak to konieczne, aby pasowała do jej elementów podrzędnych, lub
  • * (gwiazdka) zajmuje pozostałą przestrzeń

*Jest poprzedzony numerem (domyślnie jest 1, jeśli liczba nie jest określona). Dostępna przestrzeń jest dzielona między kolumny oznaczone gwiazdką proporcjonalnie do numeru prefiksu.

Jeśli masz tę definicję

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

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

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

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


W konkretnym przypadku, w którym szerokość siatki wynosi 354, a proporcje dwóch kolumn wynoszą 40 i 314, otrzymasz następujące szerokości kolumn:

Szerokość pierwszej kolumny = 40 / (40 + 314) * 354 = 40
Druga szerokość ziarna = 314 / (40 + 314) * 354 = 314

Szerokość gwiazdy jest najlepiej używana, gdy szerokość siatki nie jest ustalona. Gdy rozmiar siatki zostanie zmieniony, kolumny zostaną skalowane proporcjonalnie zgodnie z szerokością gwiazd. W twoim przypadku szerokość siatki jest stała i równie łatwo możesz 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 kolumna jest trzykrotnie większa niż pierwsza, potrzebujesz tej definicji:

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

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

Martin Liversage
źródło
3

Jego stosunek 0,07 do dowolnej innej kolumny o szerokości gwiazdy - tj. Jeśli inna kolumna ColomnDefinition ma szerokość 0,14, wówczas ta kolumna ma podwójną szerokość = chodzi o racje

Dean Chalk
źródło
1

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

Kuba
źródło
0

[..] wartość wyrażona jako ważony odsetek dostępnego miejsca.

HB
źródło