在运行时更改网格布局

时间:2017-11-24 20:30:47

标签: xamarin.forms

我有一个包含以下行定义的网格...

  <Grid.RowDefinitions>
    <RowDefinition Height="5*" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="2*" />
  </Grid.RowDefinitions>

当用户按下按钮时,如何删除底部的两行并将顶行(包括其中的视图)拉伸到网格的底部?

我保留了所有行并做了这个......

mainGrid.RowDefinitions[2].Height = new GridLength(1, GridUnitType.Star);
mainGrid.ForceLayout();

我想为高度变化设置动画。

1 个答案:

答案 0 :(得分:3)

尝试这样的事情:

网格

<Grid x:Name="grid">
    <Grid.RowDefinitions>
        <RowDefinition Height="5*" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="2*" />
    </Grid.RowDefinitions>
    <StackLayout Grid.Row="0" 
                 HorizontalOptions="FillAndExpand"
                 VerticalOptions="FillAndExpand"
                 x:Name="stkOne" 
                 BackgroundColor="Red"/>
    <StackLayout Grid.Row="1" 
                 HorizontalOptions="FillAndExpand"
                 VerticalOptions="FillAndExpand"
                 x:Name="stkTwo" 
                 BackgroundColor="Green"/>
    <StackLayout Grid.Row="1" 
                 HorizontalOptions="FillAndExpand"
                 VerticalOptions="FillAndExpand"
                 x:Name="stkThree" 
                 BackgroundColor="Blue"/>
    <Button Text="Expand One"
            HorizontalOptions="EndAndExpand"
            Command="ExpandCommand"/>
</Grid>

背后的代码

// Create the command and set it up to execute this method:
void ExecuteExpand()
{
    stkTwo.IsVisible=false;
    stkThree.IsVisible=false;
    Grid.SetRowSpan(stkOne, 3);
    grid.ForceLayout();
}

我不确定它是否能按你的需要工作,但请试一试。