2016-08-19 49 views
1

我是Xamarin.Forms的新手。现在我需要在页面中设计一个网格,网格是3X2(2行,3列)。但是我需要这个网格中的所有单元格为正方形,并且此网格的宽度与其父视图相匹配。使用Xamarin创建一个3X2网格,每个单元格呈方形。表格

换句话说,假设屏幕的宽度(或这个网格的父视图)是3,那么每列的宽度是1.我怎样才能强制每行的高度恰好为1(so网格中的每个单元的高度等于宽度)?

这是我设计的,但不能工作:

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
</Grid> 

是否有纯粹的XAML解决这个问题?

谢谢你的帮助。

回答

2

Star调整大小调整自己与可用空间的方向,所以你需要通过重写OnSizeAllocated方法手动调整(小心嵌套方法调用时调整大小的孩子)。

的XAML:

<Grid x:Name="mainGrid"> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
</Grid> 

Xaml.cs

protected override void OnSizeAllocated(double width, double height) 
{ 
    base.OnSizeAllocated(width, height); 

    if (3 * height > 2 * height) 
     mainGrid.HeightRequest = 2.0/3 * width; 
    else 
     mainGrid.WidthRequest = 3.0/2 * height; 
} 
+1

感谢。但是,我对'if(3 * height> 2 * height)'有点困惑' – Alan

+0

让我们以一个例子来解释:如果我们假设每个方形边缘都是1“,那么您的容器应该是3”和2“。你的'Grid'应该尊重这个3x2的比例,这个条件检查我们是否减少'Width'或'Height'。 – Kowalski

0
protected override void OnSizeAllocated(double width, double height) 
{ 
    base.OnSizeAllocated(width, height); 

    double colsCount = MainGrid.ColumnDefinitions.Count; 
    double rowsCount = MainGrid.RowDefinitions.Count; 
    if (colsCount > 0 & rowsCount > 0) 
    { 
     MainGrid.HeightRequest = width/colsCount * rowsCount; 
    } 
} 
相关问题