隐藏的Stacklayout占用xamarin形式的空间

时间:2017-08-11 10:11:12

标签: xaml xamarin.forms

我正在使用Xamrin在Xaml中创建一个表单,其中包含我隐藏stacklayout的绝对布局。但是在隐藏的stacklayout下方还有一个stacklayout,但是隐藏的stacklayout占用了空间。

我想做什么。当我隐藏一个stacklayout时,另一个stacklayout应该取代隐藏的staklayout。

4 个答案:

答案 0 :(得分:2)

感谢您的帮助和支持。

我已经解决了这个问题:

我按照这个链接 https://forums.xamarin.com/discussion/83632/hiding-and-showing-stacklayout  在这个链接中他们说使用网格并使行高自动,它会 自动调整布局的额外空间。

<Grid   VerticalOptions="Fill">    
 <Grid.RowDefinitions>
            <RowDefinition Height="100"/>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions> <StackLayout Grid.Row="1" Spacing="20"><StackLayout   Margin="10,0">  
        <Label Text="lable 1" VerticalOptions="Center" FontSize="Small" />
        <Label Text="lable 2" VerticalOptions="Center" FontSize="Small" />
</StackLayout>
<StackLayout  IsVisible="{Binding IsStudent}" Margin="10,0">  
    <Label Text="lable3" VerticalOptions="Center" FontSize="Small" />
        <Label Text="lable 4" VerticalOptions="Center" FontSize="Small" />
    <Label Text="lable 5" VerticalOptions="Center" FontSize="Small" />
        <Label Text="lable 6" VerticalOptions="Center" FontSize="Small" />
</StackLayout>  </StackLayout>  <StackLayout Grid.Row="2" Spacing="20" >
<local:Button x:Name="btnSave" Text="Submit" VerticalOptions="End" HorizontalOptions="FillAndExpand"  IsVisible="{Binding IsBusy, Converter={x:Static local:InverseBoolConverter.Instance}}"   AutomationId="saveButton" /></StackLayout></Grid>

答案 1 :(得分:2)

不需要网格。 设置IsVisible AND HeightRequest属性。

 MyStackLayout.IsVisible = false;
 MyStackLayout.HeightRequest = 0; // trigger recalc of space layout. 

heightrequest的更改会触发所需的重新计算。

答案 2 :(得分:1)

我也在研究为什么那些隐藏的控件正在占据空间......他们正在占据空间,就是这样。 您可以进行简单的添加和删除标签。像这样:

public class MyStack : StackLayout
{
    Label
        _label1 = new Label(),
        _label2 = new Label(),
        _label3 = new Label();

    public void ShowLabels()
    {
        Children.Add(_label1);
        Children.Add(_label2);
        Children.Add(_label3);
    }

    public void HideLabels()
    {
        Children.Remove(_label1);
        Children.Remove(_label2);
        Children.Remove(_label3);
    }
}

答案 3 :(得分:0)

我的推荐是将StackLayout放在内容的底部,以便将其他元素的原始高度保持在顶部。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="CentroDono.Views.YOURVIEWPAGE"
              Title="YOURVIEWTITLE"
             x:Name="YOURPAGECONTENTNAME">
    <ContentPage.Content>
        <StackLayout>
        <!--VISIBLE CONTENT-->
            <Label Text="HELLO"/>
        </StackLayout>
        <StackLayout>
            <Label Text="FOOTER"/>
            <!--INVISIBLE CONTENT-->    
            <Label x:Name="_searchText"  Text="Result1" IsVisible="False"/>
            <Label x:Name="_searchText2"  Text="Result2" IsVisible="False"/>
            <Label x:Name="_searchText3"  Text="Result3" IsVisible="False"/>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>