首页 文章

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

提问于
浏览
2

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

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

4 回答

  • 2

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

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

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

  • 1

    Thanks for help and supports.

    I've resolved the issue:

    我按照这个链接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

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

    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);
        }
    }
    
  • 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>
    

相关问题