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?

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;


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

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