2013-07-31 6 views
7

誰が使用しての違いを説明することができます:C#WPF - GridLength GridUnitType.Auto

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

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

本の私の限られた知識がのためにこれらの両方の同一であるソリューションを信じるに私をリード自動的に状態... "自動"であるため、二重の値が冗長になります。

私が見たほとんどの例では、GridUnitType.Autoの前に0ではなく1が表示されていますが、いずれのオプションも同じように動作しているようです。

が、これはそうであるか、誰もが、これらは異なる方法/場合にいくつかの光を当てることができ

答えて

14

私は、値GridUnitType.Autoを使用した場合、コンストラクタに渡された最初の値として、冗長であるあなたの理解が正しいだと思いますサイズはコンテンツオブジェクトによって決定されます。

構造体コンストラクタGridLengthのコンストラクタのコンテキストでは、2番目のパラメータ型にすべての使用可能な状態を表す値が含まれるように、このパラメータを保持することは意味があります(GridUnitType)。

documentationから:

列挙型GridUnitTypeは、次の値を含めることができます。二番目のパラメータはGridUnitType.PixelまたはGridUnitType.Starに設定されている場合

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. 

だから本当に、最初のパラメータは、関連性があります。

他の方法ではうまく動作しません。 1つのパラメータをGridUnitTypeとして受け入れたコンストラクタを作成しようとした場合、PixelまたはStarを使用した場合は2番目のパラメータのみが必要です。

このようにして、追加の型を指定せずにdoubleを受け入れる1つのパラメータコンストラクタがあるという利点があります。 Autoを使用している場合(例のように)、潜在的に奇妙な2つのパラメータコンストラクタのコストがあります。 、 ``と GridLength twoThirds =新しいGridLength(2;

+1

おかげ 'GridLength oneThird =新しいGridLength(1、GridUnitType.Star)として ' GridUnitType.Star'を使用する場合、私はまた、それが関連するであろう理解しますGridUnitType.Star); ' は、2番目のGridLenthに最初のスペースを2倍にして重み付けしますか? – shann1990

+0

あなたは正しいです、私はちょっとしたフォーマットをしてしまいましたし、私が書いたものを正しく証明していませんでした(Clemensに感謝します)。 – Chris

+3

コンストラクタの初期化よりも綺麗に見える静的プロパティ 'GridLength.Auto'もあることに言及する価値があります。 –