[英]How to Overlay Loading View for XAMARIN.FORMS
选择任何列表视图时如何使用覆盖活动指示器。
<ListView x:Name="lstView" ItemsSource="{Binding Items}"
ItemTapped="Handle_ItemTapped"
ItemSelected="Handle_ItemSelected">
<ListView.Header>
<Label Text="Store Allocation" BackgroundColor="White" TextColor="Black" FontAttributes="Bold" HorizontalOptions="Fill" HorizontalTextAlignment="Center" />
</ListView.Header>
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Title}" Height="200" Detail="{Binding Detail}" DetailColor="Black" TextColor="Red" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
假设您没有使用MVVM(看起来不像),并且您在Page
这相当简单
将ActivityIndicator
和ListView
放在AbsoluteLayout
<ContentPage x:Name="Page" ...>
<AbsoluteLayout VerticalOptions="Fill">
<ListView AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1">
<!-- ... -->
</ListView>
<ActivityIndicator IsRunning="{Binding Path=IsBusy, Source={x:Reference Page}}" AbsoluteLayout.LayoutFlags="PositionProportional" AbsoluteLayout.LayoutBounds=".5,.5,-1,-1" />
</AbsoluteLayout>
</ContentPage>
我添加了一个包装您的ListView
的AbsoluteLayout
。 ListView
设置为占据AbsoluteLayout
的整个区域。 此外,我在顶部添加了一个ActivityIndicator
,该指示器居中且具有默认大小( AbsoluteLayout.LayoutFlags="PositionProportional"
和AbsoluteLayout.LayoutBounds=".5,.5,-1,-1"
)。
如您在此处看到的,当页面忙时, Page
公开了IsBusy
属性,您可以设置该属性,即检索数据或其他内容。 我已经将ActivityIndicator
的IsRunning
属性绑定到IsBusy
,每当Page
指示忙时,该ActivityIndicator
显示出来。
在您的后台代码中,例如从检索您的数据的async
方法中设置IsBusy
private async void Update()
{
IsBusy = true;
this.Data = await GetData();
IsBusy = false;
}
编辑
既然您想知道,如何在后台禁用ListView
:
您可以叠加一个BoxView
<BoxView AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1"
BackgroundColor="Transparent"
InputTransparent="false"
IsVisible="{Binding Path=IsBusy, Source={x:Reference Page}}" />
将其放在ListView
和ActivityIndicator
,它应拦截ListView
否则会收到的所有事件。 仅在显示ActivityIndicator
显示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.