Altura automática WPF no código

101

Como eu poderia definir o valor da Heightpropriedade de um controle WPF no código C # para " Auto"?

<Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
</Grid.RowDefinitions>

Quero reproduzir esse comportamento no código por trás. Alguma ideia?

Karim Agha
fonte

Respostas:

144

Talvez este link o ajude.

Às vezes, convém definir programaticamente a altura ou largura de um elemento WPF para Auto no código. Para fazer isso, basta usar o valor Double.NaN (Not a Number).

Por exemplo, em C #:

this.txtName.Width = Double.NaN;

Zach Johnson
fonte
1
Não funcione no meu caso. Mas estou mudando altura e largura por meio de comportamentos (expressão blend 4.0 lib)
Franck
1
O link está morto, mas você pode acessar uma versão arquivada aqui
akjoshi
2
A resposta de Nimrod é muito mais explícita e fácil de entender.
David
Obter 'NaN' não é um valor válido para a propriedade 'MaxWidth'
Damitha
Eu sinto que a resposta de Nimrod é a mais limpa e agora deve ser a resposta aceita (não tenho certeza se GridLength.Autoera possível no passado). Há também GridLength.Starpara preencher área remanescente.
Wolfgang Schreurs
111

Você pode usar

RowDefinition rd = new RowDefinition ();  
rd.Height = GridLength.Auto;  
ContentGrid.RowDefinitions.Add (rd);
Nimrod Shory
fonte
8
Alguma diferença entre esta resposta e a resposta aceita? Porque do contrário, essa deve ser a melhor resposta para não burlar a estrutura.
estebro
3
De acordo com o refletor, GridLength.Auto é o novo GridLength (1.0, GridUnitType.Auto); portanto, não exatamente equivalente à resposta aceita, mas muito mais legível.
helios456
Esta não é uma solução tão geral quanto a resposta aceita. Nem todos os controles implementam uma propriedade Height como um objeto 'GridLength' (struct). Para aqueles que usam apenas o dobro, essa resposta não funciona. E a pergunta não era geral, apenas usava uma grade como exemplo.
UuDdLrLrSs 01 de