Значение * (звездочка) в WPF ColumnDefinition? - PullRequest
95 голосов
/ 05 августа 2011

Что означает * (звездочка) в 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>

Ответы [ 4 ]

151 голосов
/ 05 августа 2011

Когда вы определяете столбец в сетке 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, вы получаете следующие значения ширины столбца:

First column width = 40/(40 + 314)*354 = 40
Second coulmn width = 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. И так далее.

2 голосов
/ 05 августа 2011

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

1 голос
/ 05 августа 2011

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

0 голосов
/ 05 августа 2011

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

...