如何为XAMARIN.FORMS覆盖加载视图

use*_*877 0 c# 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>
Run Code Online (Sandbox Code Playgroud)

Pau*_*her 8

假设你没有使用MVVM(看起来不像)并且你在使用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>
Run Code Online (Sandbox Code Playgroud)

我添加了一个AbsoluteLayout包装你的ListView.该ListView设置采取的整个区域AbsoluteLayout.此外,我添加了一个ActivityIndicator顶部,它居中并具有默认大小(AbsoluteLayout.LayoutFlags="PositionProportional"AbsoluteLayout.LayoutBounds=".5,.5,-1,-1").

正如你可以看到这里,Page公开IsBusy属性,它可以设置,当页面繁忙,即获取数据或什么的.我已经绑定的IsRunning财产ActivityIndicatorIsBusy,该ActivityIndicator节目,每当在Page表明它的忙.

从您的代码隐藏中,IsBusy例如从async检索数据的方法设置

private async void Update()
{
    IsBusy = true;
    this.Data = await GetData();
    IsBusy = false;
}
Run Code Online (Sandbox Code Playgroud)

编辑

既然你想知道,如何ListView在后台禁用它:

你可以覆盖一个透明的 BoxView

<BoxView AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1"
    BackgroundColor="Transparent"
    InputTransparent="false"
    IsVisible="{Binding Path=IsBusy, Source={x:Reference Page}}" />
Run Code Online (Sandbox Code Playgroud)

把它放在你ListView和你之间ActivityIndicator,它应该拦截所有ListView会收到的事件.仅在显示时ActivityIndicator显示.