当您在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实例化时正在使用的TypeConverter.您也可以在代码中使用它.它被称为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("*");