【问题标题】:Xamarin Forms CarouselPage ActivityIndicator in every ContentPages not working每个 ContentPages 中的 Xamarin Forms CarouselPage ActivityIndi​​cator 不起作用
【发布时间】:2018-10-31 01:34:24
【问题描述】:

我有一个 CarouselPage,其中有大约 6 个内容页面 每个 Page 都有一个用于选择列表的 ListView。 当 ListItem 被选择(点击)时,用户将被带到下一个 ContentPage,并根据先前的选择使用适当的标准。 它一切工作顺利。 但有时在某些页面上需要时间。 我想向用户显示一个 ActivityIndi​​cator,这样他就不会觉得自己没有点击或尝试双击或任何此类等待问题。

我的工作:-

这是 CarouselPage 起始页眉信息

<CarouselPage x:Name="CarouselPage_Selection_Page"
              xmlns="http://xamarin.com/schemas/2014/forms"  
              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"  
              xmlns:local="clr-namespace:saralEHR"
              Padding="0"
              Title="Selection Pages">

以下是 XAML 代码:-

   <ContentPage Padding="5"
        x:Name="ContentPage_Select_Visiting_Location">
        <Grid BackgroundColor="Transparent" RowSpacing="0" Margin="10" Padding="0">
            <Grid.RowDefinitions>
                <RowDefinition Height="30" />
                <RowDefinition Height="3*" />
                <RowDefinition Height="108"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <StackLayout Grid.Row="0" VerticalOptions="Start" HorizontalOptions="FillAndExpand" BackgroundColor="Black">
                <Label Text="SELECT LOCATION" BackgroundColor="Black" TextColor="White"/>
            </StackLayout>
            <StackLayout Grid.Row="1" VerticalOptions="StartAndExpand" HorizontalOptions="CenterAndExpand" BackgroundColor="Transparent">
                <ListView x:Name="ListView_Visiting_Location_Name"
                            ItemsSource="{Binding Visiting_Location_Name_Table}" 
                            ItemTapped="ListView_Visiting_Location_Name_ItemTapped">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>
                                <StackLayout HorizontalOptions="StartAndExpand" Orientation="Horizontal">
                                    <Label x:Name="Label_Visiting_Location_Name"
                                            Text="{Binding Visiting_Location_Name}"
                                            FontAttributes="Bold">
                                    </Label>
                                    <Label x:Name="Label_Visiting_Location_ID"
                                            Text="{Binding Visiting_Location_ID, StringFormat='{0:F0}'}"
                                            IsVisible="False">
                                    </Label>
                                </StackLayout>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
                <ActivityIndicator 
                        x:Name="ActivityIndicator_Busy_Selected_Visiting_Location"
                        Color="Black"
                        IsEnabled="True" 
                        HorizontalOptions="Center" 
                        VerticalOptions="Center"
                        IsRunning="{Binding Source={x:Reference ContentPage_Select_Visiting_Location}, Path=IsBusy}" 
                        IsVisible="{Binding Source={x:Reference ContentPage_Select_Visiting_Location}, Path=IsBusy}" />
            </StackLayout>
        </Grid>
    </ContentPage>

最后这是文件后面的 xaml.cs 代码:-

protected async void ListView_Visiting_Location_Name_ItemTapped(object sender, ItemTappedEventArgs e)
{
    string where_clause = "";

    ContentPage_Select_Visiting_Location.IsBusy = true;

    await Task.Run(() =>
    {
        Device.BeginInvokeOnMainThread(async () =>
        {
            try
            {
                Sql_Common.selected_appointments_booking_Visiting_Location_ID = (e.Item as Visiting_Location_Master).Visiting_Location_ID;
                Sql_Common.selected_appointments_booking_Visiting_Location_name = (e.Item as Visiting_Location_Master).Visiting_Location_Name;

                ActivityIndicator_Busy_Selected_Visiting_Location.IsRunning = true;
                ActivityIndicator_Busy_Selected_Visiting_Location.IsVisible = true;

                await Task.Delay(3000);

                Load_Slot_Date_Details();

            }
            catch (Exception ex)
            {
                await DisplayAlert("Error!", ex.Message + where_clause, "Ok");
            }

            int index = Children.IndexOf(CurrentPage);
            this.CurrentPage = this.Children[index + 1];

            ActivityIndicator_Busy_Selected_Visiting_Location.IsRunning = false;

            this.IsBusy = false;

        });

    });

    ActivityIndicator_Busy_Selected_Visiting_Location.IsRunning = false;

    this.IsBusy = false;

    ContentPage_Select_Visiting_Location.IsBusy = false;
}

你可能会发现我做过很多这样的锻炼。IsBusy = true, ActivityIndi​​cator_Busy_Selected_Visiting_Location.IsRunning = true;等等,但没有任何效果。

任何有关相同的帮助将非常可观。

我在谷歌上搜索了很多主题,但在 CarouselPage 的单个 ContentPage 中没有找到特定运行的 ActivityIndi​​cator,其中有多个 ContentPage

【问题讨论】:

  • 您的ActivityIndicator 似乎嵌套在StackLayout 中。把它移到外面,所以它是Grid的子代
  • @Ale_lipa 你能把这个作为答案发布吗?我会详细评论它。

标签: c# xamarin.forms visual-studio-2017


【解决方案1】:

根据 OP 要求,我将我的评论作为答案。

您的ActivityIndicator 似乎嵌套在 StackLayout。把它移到外面,所以它是Grid的孩子

【讨论】:

  • 完全按照您的建议进行操作,并立即解决。不仅在所有页面中实现后,所有页面也对ActivityIndi​​cator做出了流畅的响应。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 2017-08-28
  • 2019-06-25
  • 2019-07-24
  • 2018-02-14
相关资源
最近更新 更多