Grid是一种横竖排列的布局,即九宫格。可以通过ColumnSpacing
和RowSpacing
设置每行每列之间的间隙。Xaml定义时会先通过RowDefinitions
和ColumnDefinitions
确定Grid行和列的数量,RowDefinition的Height
属性表示每行的高度,ColumnDefinition的'Width'属性表示每列的宽度。Height和Width都是'GridLength'类型。
定义GridLength类型时可能会涉及到GridUnitType
枚举类型的使用。
• Absolute—表示一个具体宽高值(device-independent units,在XAML中定义是用具体数字表示)
• Auto—表示宽高由内容决定 (在XAML中用“Auto” 表示)
• Star—余下的单元格按比例分配宽高 ( 在XAML中用“”表示或数字+“”)
XAML定义示例,定义一个两行两列的Grid,第一行的高度是90,第二行的高度是180,第一列宽度是自适应Cell的宽度,第二列是填充剩余宽度:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="90" />
<RowDefinition Height="180" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
...
</Grid>
代码定义只要调用Grid的RowDefinitions和ColumnDefinitions的Add方法即可:
Grid的行和列定义完之后,就可以确定每个视图所在的行和列。
将Grid的Xaml定义修改如下:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="90" />
<RowDefinition Height="180" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Text="Top Left" Grid.Row="0" Grid.Column="0" BackgroundColor="Aqua"/>
<Label Text="Top Right" Grid.Row="0" Grid.Column="1" BackgroundColor="Yellow"/>
<Label Text="Bottom Left" Grid.Row="1" Grid.Column="0" BackgroundColor="Lime"/>
<Label Text="Bottom Right" Grid.Row="1" Grid.Column="1" BackgroundColor="Red"/>
</Grid>
预览中IOS的效果如下:
子视图所在的位置是由Grid.Row
和Grid.Column
两个属性确定的(Grid提供的附加属性),两个属性的默认值都为0,即默认位置第一行的第一列。对于这两个属性有很灵活的代码设置方法。
可以通过Grid对象Children属性的Add方法添加视图时指定
其中view是我们要添加的视图,left和top对应Grid.Column和Grid.Row。
除此之外还可以用Grid提供的静态方法Grid.SetColumn
和Gird.SetRow
方法指定子视图的位置。调用如下
view表示子视图,第二个参数表示设置的值。
观察SetColumn的方法实现:
方法中调用了第一参数的SetValue方法。Forms中的所有视图都是BindableObject(特殊类型先不做介绍)类型的,继承关系是:
View
VisualElement
Element
BindableObject
所以可以直接调用子视图的SetValue方法设置:
还有两个附加属性Grid.ColumnSpan
和Grid.RowSpan
表示子视图占据Grid的多少空间(几列和几行),Grid.ColumnSpan="2"
表示占2列。使用与Grid.Row
和Grid.Column
类似。
2025 - 快车库 - 我的知识库 重庆启连科技有限公司 渝ICP备16002641号-10
企客连连 表单助手 企服开发 榜单123