C#WPF - GridLength GridUnitType.Auto

sha*_*990 9 c# wpf gridlength

任何人都可以解释使用之间的区别:

 GridLength length = new GridLength(0, GridUnitType.Auto) 
Run Code Online (Sandbox Code Playgroud)

 GridLength length = new GridLength(1, GridUnitType.Auto)
Run Code Online (Sandbox Code Playgroud)

我对此的有限了解使我相信这些都是相同的解决方案,因为它表示自动存在......"自动",因此使双值冗余.

我见过的大多数例子都显示GridUnitType.Auto前面有1而不是0,但在我看来,任何一个选项都是一样的吗?

是这种情况还是任何人都可以了解这些是否/如何不同

Chr*_*ris 17

我认为您的理解是正确的,当GridUnitType.Auto使用该值时,传递给构造函数的第一个值是多余的,因为大小将由内容对象确定.

GridLength结构构造函数的上下文中保留此参数(即使它未在此实例中使用)有一定意义,因为它允许第二个参数类型包含描述所有可用状态的值GridUnitType.

文档:

枚举类型GridUnitType可以包含以下值:

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. 
Run Code Online (Sandbox Code Playgroud)

实际上,第一个参数仅在第二个参数设置为GridUnitType.Pixel或时才相关GridUnitType.Star.

它不会以其他方式整齐地工作,例如,如果你试图让构造函数接受1参数作为a GridUnitType,并且只需要第二个参数,如果你使用PixelStar.

这样,您可以获得一个1参数构造函数的好处,该构造函数接受double而不指定其他类型.虽然它在使用时确实具有潜在奇怪的两个参数构造函数的成本Auto(如在您的示例中).

  • 值得一提的是,还有一个静态属性`GridLength.Auto`,它看起来比构造函数初始化更好. (6认同)
  • 谢谢,我也理解将GridUnitType.Star用作GridLength oneThird = new GridLength(1,GridUnitType.Star);和GridLength twoThirds = new GridLength(2,GridUnitType.Star);与该空间将被加权,从而使第二个GridLenth的空间是第一个的两倍? (2认同)