在代码后面应用Grid Star Size

时间:2012-02-27 14:29:40

标签: c# wpf

如何以编程方式构建这段XAML?

<Grid Name="gridMarkets">
    <Grid.RowDefinitions>
        <RowDefinition Height="10" />
        <RowDefinition Height="*" MinHeight="16" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="10" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
 </Grid>

是动态解析和构造控件的优雅解决方案吗?

我正在尝试做点什么:

RowDefinition newRow = new RowDefinition();
newRow.Height = new GridLength(10);
newGrid.RowDefinitions.Add(newRow);

但如何指定*标志?

寻找这个问题的任何想法! 谢谢!

3 个答案:

答案 0 :(得分:35)

您可以使用Grid.Star单位类型

newRow.Height = new GridLength(1, GridUnitType.Star);

您也可以使用XamlReader对象将XAML字符串从代码隐藏转换为UI对象,但我通常更喜欢手动创建对象,就像创建它们一样。

答案 1 :(得分:8)

以下是一些例子:

grid.RowDefinitions.Add(new RowDefinition {Height = new GridLength(10)});
grid.RowDefinitions.Add(new RowDefinition {Height = new GridLength(1, GridUnitType.Star), MinHeight = 16});

grid.RowDefinitions.Add(new RowDefinition {Height = new GridLength(1, GridUnitType.Star)});
grid.RowDefinitions.Add(new RowDefinition {Height = GridLength.Auto});

和列类似。

答案 2 :(得分:5)

正如其他人所建议的那样,使用允许您指定GridLength的{​​{1}}构造函数是正确的方法。

但是,如果由于某种原因,你想要将字符串值实际转换为正确的类型,就像在XAML中完成一样,你也可以这样做:

查看GridUnitType类型:它已使用参数GridLength定义了TypeConverter属性。这意味着您可以使用该类型执行转换:

typeof(GridLengthConverter)