110 votes

WPF Hauteur automatique en code

Comment pourrais-je définir la valeur de la propriété Height d'un contrôle WPF en code C# à "Auto"?

Je souhaite reproduire ce comportement dans le code-behind. Des idées?

165voto

Zach Johnson Points 12062

Peut-être ce lien vous aidera.

Parfois, vous voudrez définir de manière programmatique la Hauteur ou la Largeur d'un élément WPF sur Auto en code. Pour cela, utilisez simplement la valeur Double.NaN (Not a Number).

Par exemple, en C# :

this.txtName.Width = Double.NaN;

1 votes

Ne fonctionne pas dans mon cas. Mais je change la hauteur et la largeur à travers les comportements (bibliothèque Expression Blend 4.0)

1 votes

Le lien est mort mais vous pouvez accéder à une version archivée ici

3 votes

La réponse de Nimrod est beaucoup plus explicite et plus facile à comprendre.

120voto

Nimrod Shory Points 591

Vous pouvez utiliser

RowDefinition rd = new RowDefinition();  
rd.Height = GridLength.Auto;  
ContentGrid.RowDefinitions.Add(rd);

8 votes

Y a-t-il des différences entre cette réponse et la réponse acceptée? Parce que sinon, celle-ci devrait être en tête pour ne pas contourner le cadre.

3 votes

Selon le réflecteur, GridLength.Auto est new GridLength(1.0, GridUnitType.Auto); donc pas tout à fait équivalent à la réponse acceptée, mais beaucoup plus lisible.

0 votes

Il ne s'agit pas d'une solution aussi générale que la réponse acceptée. Tous les contrôles n'implémentent pas une propriété de hauteur en tant qu'objet 'GridLength' (struct). Pour ceux qui utilisent simplement double, cette réponse ne fonctionne pas. Et la question ne demandait pas généralement, elle utilisait simplement une grille comme exemple.

4voto

Edgaras Points 412

Alors que la question a été répondue avec le code-behind (comme demandé), voici la même solution en XAML pour les propriétés de contrôle de base qui n'ont pas de "auto" :

xmlns:sys="clr-namespace:System;assembly=mscorlib"

Height="{x:Static sys:Double.NaN}"

Je poste cela car Google m'a dirigé ici en cherchant une solution XAML pour un TextBox (auto n'existe pas).

0voto

Pour définir la taille des contrôles de mise en page comme Grid, StackPanel ou Canvas, utilisez la taille réelle du parent, la taille ou la propriété préférée du parent. Dans cet exemple, j'ai un ScrollViewer défini en XAML comme parent, donc :

Grid mygrid = new Grid();
mygrid.Width = 300;
mygrid.Height = myScrollViewer.ActualHeight;

Cela se comporte comme le réglage de la hauteur de mygrid sur Auto

-1voto

MelloG Points 314

Vous pouvez mettre la valeur "Auto" dans la fenêtre des propriétés si vous ne voulez pas le faire programmation, comme moi... sinon, ce que Zach a dit fonctionne également.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X