我正在使用Xamrin在Xaml中创建一个表单,其中包含我隐藏stacklayout的绝对布局 . 但是在隐藏的stacklayout下面还有一个stacklayout,但是隐藏的stacklayout占用了空间 .
我想做什么 . 当我隐藏一个stacklayout时,另一个stacklayout应该取代隐藏的staklayout .
不需要网格 . 设置IsVisible AND HeightRequest属性 .
MyStackLayout.IsVisible = false; MyStackLayout.HeightRequest = 0; // trigger recalc of space layout.
heightrequest的更改会触发所需的重新计算 .
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>
我也在研究为什么那些隐藏的控件正在占据空间......他们正在占据空间,就是这样 . 您可以进行简单的添加和删除标签 . 像这样的东西:
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); } }
我的推荐是将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>
4 回答
不需要网格 . 设置IsVisible AND HeightRequest属性 .
heightrequest的更改会触发所需的重新计算 .
Thanks for help and supports.
I've resolved the issue:
我按照这个链接https://forums.xamarin.com/discussion/83632/hiding-and-showing-stacklayout在这个链接中他们说使用网格并使行高自动,它会自动调整布局的额外空间 .
我也在研究为什么那些隐藏的控件正在占据空间......他们正在占据空间,就是这样 . 您可以进行简单的添加和删除标签 . 像这样的东西:
我的推荐是将StackLayout放在内容的底部,以便将其他元素的原始高度保持在顶部 .