Qual é o significado de * (asterisco) em XAML ColumnDefinition?


106

Qual é o significado de * (asterisco) no XAML abaixo?

<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>

se a largura da minha segunda coluna for o dobro da largura da primeira e da terceira coluna for o triplo da primeira, então como posso usar o Astrik
Shashank

Respostas:


168

Ao definir uma coluna em uma grade WPF, você pode definir a largura para um dos três valores possíveis:

  • Uma largura fixa,
  • Auto - a coluna será tão larga quanto necessário para caber seus filhos, ou
  • * (estrela) ocupar qualquer espaço restante disponível

O *é prefixado por um número (o padrão é 1 se nenhum número for especificado). O espaço disponível é dividido entre as colunas com estrela em proporção ao número do prefixo.

Se você tem esta definição

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

A primeira coluna terá 7% do espaço total disponível e a segunda coluna receberá 93%. Por outro lado, se você tivesse esta definição:

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

A primeira coluna obteria 1/3 e a segunda 2/3 do espaço disponível.


No seu caso específico, onde a largura da grade é 354 e as proporções das duas colunas são 40 e 314, você obtém as seguintes larguras de coluna:

Largura da primeira coluna = 40 / (40 + 314) * 354 = 40
Largura do segundo canal = 314 / (40 + 314) * 354 = 314

A largura da estrela é melhor usada quando a largura da grade não é fixa. Quando a grade é redimensionada, as colunas são dimensionadas proporcionalmente conforme especificado pela largura das estrelas. No seu caso, a largura da grade é fixa e você poderia facilmente ter usado colunas de largura fixa.

Se você deseja um layout onde a segunda coluna tem o dobro da largura da primeira e a terceira coluna tem o triplo da largura da primeira, você precisa desta definição:

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

Se a largura total da grade é 300, você obtém larguras de coluna 50, 100 e 150. Se a largura total da grade é 600, você obtém larguras de coluna 100, 200 e 300. E assim por diante.


3

Sua proporção de 0,07 em relação a qualquer outra coluna com largura de estrela - ou seja, se outra definição de coluna tem uma largura de 0,14, então essa coluna tem o dobro da largura = é tudo sobre rações


1

Ele cria tamanhos de coluna usando proporções. Se você tivesse outra definição, <ColumnDefinition Width="0.03*"/>a primeira coluna ocuparia 70% do espaço e a segunda ocuparia 30%.


0

[..] um valor que é expresso como uma proporção ponderada do espaço disponível.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.