Как скрыть StackLayout в формах Xamarin - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь скрыть StackLayout под названием «InfoStackLayout» после загрузки моей конфигурации, отображая информационную метку в течение 5 секунд, но после сокрытия Infostack в коде моя таблица в ContentPage не обновляет представление и оставляет пустое пространство. (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>

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

1 Ответ

0 голосов
/ 30 октября 2018

@ Shan ответ был лучшим решением. Просто замените Task.Factory.StartNew на Device.BeginInvokeOnMainThread, чтобы добиться цели.

...