Xamarin.Forms中如何在Grid渲染前计算其可容纳的固定大小单元格数量
Xamarin.Forms Grid固定尺寸单元格容量计算方案
- 你不需要实现自定义布局就能满足需求,用原生自带的属性和事件即可完成,性能开销远低于自定义布局方案。
- 具体实现步骤:
- 提前定义好固定参数:单元格宽高、Grid的
ColumnSpacing/RowSpacing、Grid自身的上下左右边距Padding - 监听Grid的
SizeChanged事件,该事件会在Grid渲染前触发,你可以从事件参数中拿到Grid的最终可用宽高 - 列数计算:
列数 = Math.Floor((Grid可用宽度 - Padding.Left - Padding.Right + ColumnSpacing) / (单元格宽度 + ColumnSpacing)),加ColumnSpacing是为了抵消最后一列后不需要的间距误差 - 行数计算:
行数 = Math.Floor((Grid可用高度 - Padding.Top - Padding.Bottom + RowSpacing) / (单元格高度 + RowSpacing)) - 总可容纳单元格数量 = 列数 × 行数
- 提前定义好固定参数:单元格宽高、Grid的
- 适配CarouselView场景:把上述逻辑放到CarouselView条目模板的根布局的
SizeChanged事件中即可,每次条目加载、屏幕横竖屏切换时都会自动重新计算。 - 如果需要动态调整Grid结构,计算完成后直接修改Grid的
RowDefinitions和ColumnDefinitions集合,再重新排列子元素的Grid.Row、Grid.Column附加属性即可。
内容的提问来源于stack exchange,提问作者Bondolin
相关产品推荐
相关产品推荐

