2013-07-31 12 views
7

Może ktoś wyjaśnić różnicę pomiędzy używaniem:C# WPF - GridLength GridUnitType.Auto

GridLength length = new GridLength(0, GridUnitType.Auto) 

i

GridLength length = new GridLength(1, GridUnitType.Auto) 

Moja ograniczona wiedza to prowadzi mnie do wierząc, że oba te rozwiązania są identyczne ze względu na auto jest tak, jak stwierdza ... "auto", dzięki czemu podwójna wartość jest nadmiarowa.

Większość przykładów, które widziałem pokazuje, że GridUnitType.Auto jest poprzedzone 1, a nie 0, ale wydaje mi się, że jedna z tych opcji działa tak samo?

Czy to przypadek czy może ktoś rzucić nieco światła na jeśli/jak są one różne

Odpowiedz

14

Myślę, że zrozumienie jest prawidłowe, gdy używana jest wartość GridUnitType.Auto, pierwsza wartość przekazany do konstruktora jest zbędny, gdyż rozmiar zostanie określony przez obiekt treści.

To ma sens w kontekście konstruktora struktury, aby zachować ten parametr (nawet jeśli nie jest używany w tym przypadku), ponieważ pozwala on typowi zawierać wartości opisujące wszystkie dostępne stany GridUnitType.

Z documentation:

wyliczonych typ GridUnitType może zawierać następujące wartości:

Auto - The size is determined by the size properties of the content object. 
Pixel - The value is expressed as a pixel. 
Star - The value is expressed as a weighted proportion of available space. 

Tak naprawdę, pierwszy parametr ma znaczenie tylko wtedy, gdy drugi parametr jest ustawiony na GridUnitType.Pixel lub GridUnitType.Star.

Nie działałoby to w inny sposób np. jeśli próbowałeś mieć konstruktora, który zaakceptował parametr 1 jako GridUnitType i wymagał tylko drugiego parametru, jeśli użyłeś Pixel lub Star.

W ten sposób zyskujesz na tym, że masz konstruktor 1-parametrowy, który akceptuje double bez określania dodatkowego typu. Chociaż ma koszt potencjalnie dziwnie wyglądającego konstruktora dwóch parametrów podczas korzystania z Auto (jak w twoim przykładzie).

+1

Dzięki, rozumiem też byłoby istotne przy korzystaniu 'GridUnitType.Star' jak ' GridLength jedna trzecia = new GridLength (1, GridUnitType.Star); '' GridLength i dwóch trzecich = new GridLength (2, GridUnitType.Star); ' jako, że przestrzeń będzie ważona, dając drugą GridLenth podwójną przestrzeń pierwszego? – shann1990

+0

Masz rację, mam odrobinę zaabsorbowany formatowaniem i nie udowodniłem, co napisałem (dzięki Clemens!). – Chris

+3

Warto wspomnieć, że istnieje również właściwość statyczna 'GridLength.Auto', która wygląda ładniej niż inicjalizacja konstruktora. –