XAML 代码中的行定义.高度

u0njafvf  于 12个月前  发布在  其他
关注(0)|答案(4)|浏览(115)

当你在xaml中创建一个Grid时,你可以定义RowDefinitions

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

我需要在代码中做同样的事情。我知道我能写

RowDefinition row = new RowDefinition();
row.Height = new GridLength(1.0, GridUnitType.Star);

但这对我没什么帮助,因为我有一根绳子要插进去我可以创建自己的“字符串到网格长度”转换器,但这感觉不对,因为它在xaml中工作得非常顺利。当然,我尝试过以下方法,但不起作用

row.Height = new GridLength("*");

我错过了什么?

s1ag04yj

s1ag04yj1#

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

qni6mghb2#

将RowDefinition包含到RowDefinitions中时缺少

RowDefinition row = new RowDefinition();
row.Height = new GridLength(1.0, GridUnitType.Star);
YourGrid.RowDefinitions.Add(row);

再见!拉克斯

des4xlb0

des4xlb03#

不需要创建转换器,已经有一个了,XAML解析器也在使用它:

var converter = new GridLengthConverter();
row.Height = (GridLength)converter.ConvertFromString("*");

在一个旁注上,你会发现像这样的转换器用于很多类型,因为很多类型都是从XAML中的字符串解析出来的,例如。BrushConverter & ImageSourceConverter

vojdkbi0

vojdkbi04#

以下Rutx的回答,我会使它更短

grdLbx.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1.0, GridUnitType.Star) });

相关问题