GridLength
结构体定义了 TypeConverter
,从 Xaml 实例化时将使用该结构。您也可以在代码中使用它。这叫GridLengthConverter
如果你用 Reflector 看
GridLength.cs
,它看起来像这样。注意TypeConverter
[StructLayout(LayoutKind.Sequential), TypeConverter(typeof(GridLengthConverter))]
public struct GridLength : IEquatable<GridLength>
{
//...
}
你可以这样使用它
GridLengthConverter gridLengthConverter = new GridLengthConverter();
row.Height = (GridLength)gridLengthConverter.ConvertFrom("*");
您缺少将 RowDefinition 包含到 RowDefinitions
RowDefinition row = new RowDefinition();
row.Height = new GridLength(1.0, GridUnitType.Star);
YourGrid.RowDefinitions.Add(row);
再见! 芸香科
无需创建转换器,已经有一个转换器,XAML 解析器也正在使用它:
var converter = new GridLengthConverter();
row.Height = (GridLength)converter.ConvertFromString("*");
顺便说一句,您会发现像这样的转换器适用于很多类型,因为许多类型是从 XAML 中的字符串解析的,例如
BrushConverter
& ImageSourceConverter
按照 Rutx 的回答,我会把它写得更短
grdLbx.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1.0, GridUnitType.Star) });