【问题标题】:How to hide StackLayout in Xamarin Forms如何在 Xamarin 表单中隐藏 StackLayout
【发布时间】:2019-04-02 15:18:26
【问题描述】:

我试图在我的配置下载后隐藏名为InfoStackLayoutStackLayout,显示信息标签为5s, 但是在代码中隐藏Infostack 后,我在ContentPage 中的Grid 不会刷新视图并留下空白空间。 (InfoStackLayout 不可见但仍保留空间) 更糟糕的是,ButtonsStack 中的按钮无法正确响应点击事件。 锁定和解锁手机后,一切正常。

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

【问题讨论】:

  • 使用 YourViewOrLayout.ForceLayout();当你显示/隐藏时。
  • 对 UI 的任何更新都必须在主线程上完成。将隐藏逻辑封装在 InvokeOnMainThread 方法中。
  • @Shan 谢谢!用 Device.BeginInvokeOnMainThread 替换 Task.Factory.StartNew 完成了工作:)

标签: c# xaml xamarin.forms visibility stacklayout


【解决方案1】:

@Shan 答案是最好的解决方案。只需将 Task.Factory.StartNew 替换为 Device.BeginInvokeOnMainThread 即可。

【讨论】:

    猜你喜欢
    • 2016-12-29
    • 2020-06-17
    • 2021-07-04
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    相关资源
    最近更新 更多