在xaml中创建网格时,可以这样定义RowDefinitions

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

我需要在代码中做同样的事情。我知道我会写
RowDefinition row = new RowDefinition();
row.Height = new GridLength(1.0, GridUnitType.Star);

但这不能帮到我,因为我输入了一个字符串。我可能可以创建自己的“字符串转换为GridLength”转换器,但这感觉不对,因为它可以从xaml正常运行。当然,我已经尝试了以下方法,但是没有用
row.Height = new GridLength("*");

我在这里想念什么?

最佳答案

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("*");

关于c# - 在代码中指定RowDefinition.Height,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7264241/

10-10 12:25