如何在 Xamarin Forms 中隐藏 StackLayout
How to hide StackLayout in Xamarin Forms
我试图在下载我的配置后隐藏名为 InfoStackLayout
的 StackLayout
,显示信息标签 5 秒,
但是在代码中隐藏 Infostack
之后,我在 ContentPage
中的 Grid
不会刷新视图并留空 space。 (InfoStackLayout
不可见但仍保留 space)
更糟糕的是,ButtonsStack
中的按钮无法正确响应点击事件。
锁定和解锁后 phone 一切正常。
<Grid x:Name="RootGrid" VerticalOptions="Fill" RowSpacing="0" ColumnSpacing="0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackLayout x:Name="InfoStackLayout" Grid.Row="0" Orientation="Horizontal">
<Label x:Name="InfoLabel" TextColor="White" HorizontalOptions="StartAndExpand" Font="18" />
<Image x:Name="GetConfig" HorizontalOptions="EndAndExpand" Source="loading.png" HeightRequest="32" WidthRequest="32">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="ReloadConfig_Tapped" NumberOfTapsRequired="1"/>
</Image.GestureRecognizers>
</Image>
</StackLayout>
<StackLayout x:Name="ButtonsStack" Grid.Row="1">
</StackLayout>
</Grid>
InfoLabel.Text = "Download Config";
Device.StartTimer(TimeSpan.FromSeconds(5), () =>
{
Task.Factory.StartNew(async () =>
{
await InfoStackLayout.FadeTo(0);
InfoStackLayout.IsVisible = false;
InfoStackLayout.HeightRequest = 0;
});
return false;
});
@Shan 答案是最佳解决方案。只需将 Task.Factory.StartNew 替换为 Device.BeginInvokeOnMainThread 即可。
我试图在下载我的配置后隐藏名为 InfoStackLayout
的 StackLayout
,显示信息标签 5 秒,
但是在代码中隐藏 Infostack
之后,我在 ContentPage
中的 Grid
不会刷新视图并留空 space。 (InfoStackLayout
不可见但仍保留 space)
更糟糕的是,ButtonsStack
中的按钮无法正确响应点击事件。
锁定和解锁后 phone 一切正常。
<Grid x:Name="RootGrid" VerticalOptions="Fill" RowSpacing="0" ColumnSpacing="0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackLayout x:Name="InfoStackLayout" Grid.Row="0" Orientation="Horizontal">
<Label x:Name="InfoLabel" TextColor="White" HorizontalOptions="StartAndExpand" Font="18" />
<Image x:Name="GetConfig" HorizontalOptions="EndAndExpand" Source="loading.png" HeightRequest="32" WidthRequest="32">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="ReloadConfig_Tapped" NumberOfTapsRequired="1"/>
</Image.GestureRecognizers>
</Image>
</StackLayout>
<StackLayout x:Name="ButtonsStack" Grid.Row="1">
</StackLayout>
</Grid>
InfoLabel.Text = "Download Config";
Device.StartTimer(TimeSpan.FromSeconds(5), () =>
{
Task.Factory.StartNew(async () =>
{
await InfoStackLayout.FadeTo(0);
InfoStackLayout.IsVisible = false;
InfoStackLayout.HeightRequest = 0;
});
return false;
});
@Shan 答案是最佳解决方案。只需将 Task.Factory.StartNew 替换为 Device.BeginInvokeOnMainThread 即可。