Что означает * (звездочка) в XAML ColumnDefinition?

106

Что означает * (звездочка) в приведенном ниже 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>
Шашанк
источник
если моя вторая ширина столбца вдвое больше первой, а ширина третьего столбца в три раза больше первой, тогда как я могу использовать Astrik
Shashank

Ответы:

168

Когда вы определяете столбец в сетке WPF, вы можете установить для ширины одно из трех возможных значений:

  • Фиксированная ширина,
  • Auto - столбец станет настолько широким, насколько это необходимо для размещения его дочерних элементов, или
  • * (звездочка) занять все доступное оставшееся место

Перед *символом стоит номер (по умолчанию - 1, если номер не указан). Доступное пространство делится между столбцами, отмеченными звездочкой, пропорционально номеру префикса.

Если у вас есть это определение

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

Первый столбец получит 7% от общего доступного пространства, а второй столбец получит 93%. С другой стороны, если бы у вас было это определение:

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

Первый столбец получит 1/3, а второй 2/3 доступного пространства.


В вашем конкретном случае, когда ширина сетки составляет 354, а пропорции двух столбцов - 40 и 314, вы получаете следующие значения ширины столбцов:

Ширина первого столбца = 40 / (40 + 314) * 354 = 40
Ширина второго слоя = 314 / (40 + 314) * 354 = 314

Ширину звезды лучше всего использовать, когда ширина сетки не фиксирована. При изменении размера сетки столбцы будут масштабироваться пропорционально, как указано шириной звезды. В вашем случае ширина сетки фиксирована, и вы могли бы так же легко использовать столбцы фиксированной ширины.

Если вам нужен макет, в котором второй столбец в два раза больше ширины первого, а третий столбец в три раза больше ширины первого, вам нужно это определение:

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

Если общая ширина сетки равна 300, вы получите ширину столбцов 50, 100 и 150. Если общая ширина сетки равна 600, вы получите ширину столбцов 100, 200 и 300. И так далее.

Мартин Ливерсаж
источник
3

Его отношение 0,07 к любому другому столбцу с шириной звезды - то есть, если другой столбец ColomnDefinition имеет ширину 0,14, то этот столбец вдвое больше ширины = все о рационах

Дин Мел
источник
1

Он создает размеры столбцов с использованием соотношений. Если бы у вас было другое определение, например, <ColumnDefinition Width="0.03*"/>первый столбец занимал бы 70% места, а второй - 30%.

Якуб
источник
0

[..] значение, которое выражается как взвешенная доля доступного пространства.

HB
источник