WPF Auto wysokość w kodzie

101

Jak mogę ustawić wartość Heightwłaściwości kontrolki WPF w kodzie C # na „ Auto”?

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

Chcę odtworzyć to zachowanie w kodzie za nim. Jakieś pomysły?

Karim Agha
źródło

Odpowiedzi:

144

Być może ten link ci pomoże.

Czasami możesz chcieć programowo ustawić wysokość lub szerokość elementu WPF na Auto w kodzie. Aby to zrobić, użyj po prostu wartości Double.NaN (Not a Number).

Na przykład w C #:

this.txtName.Width = Double.NaN;

Zach Johnson
źródło
1
Nie pracuj w moim przypadku. Ale zmieniam szerokość wysokości za pomocą zachowań (mieszanka wyrażeń 4.0 lib)
Franck
1
Link nie działa, ale możesz uzyskać dostęp do zarchiwizowanej wersji tutaj
akjoshi
2
Odpowiedź Nimroda jest znacznie bardziej wyraźna i łatwiejsza do zrozumienia.
David
Uzyskanie „NaN” nie jest prawidłową wartością dla właściwości „MaxWidth”
Damitha
Uważam, że odpowiedź Nimroda jest najczystsza i powinna być teraz zaakceptowaną odpowiedzią (nie jestem pewien, czy GridLength.Autobyła możliwa w przeszłości). Jest też GridLength.Stardo wypełnienia pozostałego obszaru.
Wolfgang Schreurs,
111

Możesz użyć

RowDefinition rd = new RowDefinition ();  
rd.Height = GridLength.Auto;  
ContentGrid.RowDefinitions.Add (rd);
Nimrod Shory
źródło
8
Jakieś różnice między tą odpowiedzią a zaakceptowaną odpowiedzią? Bo jeśli nie, to powinna być najlepsza odpowiedź na to, aby nie omijać ram.
estebro
3
Według reflektora, GridLength.Auto to nowy GridLength (1.0, GridUnitType.Auto); dlatego nie jest dokładnie równoważne z zaakceptowaną odpowiedzią, ale jest znacznie bardziej czytelne.
helios456
Nie jest to tak ogólne rozwiązanie, jak przyjęta odpowiedź. Nie wszystkie kontrolki implementują właściwość Height jako obiekt „GridLength” (struct). Dla tych, którzy używają tylko podwójnej odpowiedzi, ta odpowiedź nie działa. A pytanie nie było generalnie zadawane, wykorzystywało jedynie siatkę jako przykład.
UuDdLrLrSs