Hauteur automatique WPF dans le code

101

Comment pourrais-je définir la valeur de la Heightpropriété d'un contrôle WPF dans le code C # sur " Auto"?

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

Je veux reproduire ce comportement dans le code derrière. Des idées?

Karim Agha
la source

Réponses:

144

Peut - être que ce lien vous aidera.

Parfois, vous souhaiterez peut-être définir par programme la hauteur ou la largeur d'un élément WPF sur Auto dans le code. Pour ce faire, utilisez simplement la valeur Double.NaN (Not a Number).

Par exemple, en C #:

this.txtName.Width = Double.NaN;

Zach Johnson
la source
1
Ne marche pas dans mon cas. Mais je change la largeur de la hauteur à travers les comportements (expression blend 4.0 lib)
Franck
1
Le lien est mort mais vous pouvez accéder à une version archivée ici
akjoshi
2
La réponse de Nimrod est beaucoup plus explicite et plus facile à comprendre.
David
Obtenir 'NaN' n'est pas une valeur valide pour la propriété 'MaxWidth'
Damitha
Je pense que la réponse de Nimrod est la plus claire et devrait maintenant être la réponse acceptée (pas sûr que ce GridLength.Autosoit possible dans le passé). Il y a aussi GridLength.Starpour remplir la zone restante.
Wolfgang Schreurs
111

Vous pouvez utiliser

RowDefinition rd = new RowDefinition ();  
rd.Height = GridLength.Auto;  
ContentGrid.RowDefinitions.Add (rd);
Nimrod Shory
la source
8
Y a-t-il des différences entre cette réponse et la réponse acceptée? Parce que sinon, cela devrait être la meilleure réponse pour ne pas contourner le cadre.
estebro
3
Selon le réflecteur, GridLength.Auto est nouveau GridLength (1.0, GridUnitType.Auto); donc pas exactement équivalent à la réponse acceptée, mais beaucoup plus lisible.
helios456
Ce n'est pas une solution aussi générale que la réponse acceptée. Tous les contrôles n'implémentent pas une propriété Height en tant qu'objet (struct) 'GridLength'. Pour ceux qui utilisent simplement le double, cette réponse ne fonctionne pas. Et la question ne se posait pas en général, elle n'utilisait qu'une grille comme exemple.
UuDdLrLrSs