【发布时间】:2018-10-31 01:34:24
【问题描述】:
我有一个 CarouselPage,其中有大约 6 个内容页面 每个 Page 都有一个用于选择列表的 ListView。 当 ListItem 被选择(点击)时,用户将被带到下一个 ContentPage,并根据先前的选择使用适当的标准。 它一切工作顺利。 但有时在某些页面上需要时间。 我想向用户显示一个 ActivityIndicator,这样他就不会觉得自己没有点击或尝试双击或任何此类等待问题。
我的工作:-
这是 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, ActivityIndicator_Busy_Selected_Visiting_Location.IsRunning = true;等等,但没有任何效果。
任何有关相同的帮助将非常可观。
我在谷歌上搜索了很多主题,但在 CarouselPage 的单个 ContentPage 中没有找到特定运行的 ActivityIndicator,其中有多个 ContentPage
【问题讨论】:
-
您的
ActivityIndicator似乎嵌套在StackLayout中。把它移到外面,所以它是Grid的子代 -
@Ale_lipa 你能把这个作为答案发布吗?我会详细评论它。
标签: c# xamarin.forms visual-studio-2017