如何在 Xamarin Forms 中隐藏 StackLayout

How to hide StackLayout in Xamarin Forms

我试图在下载我的配置后隐藏名为 InfoStackLayoutStackLayout,显示信息标签 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 即可。