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

时间:2018-02-26 09:37:07

标签: 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>

1 个答案:

答案 0 :(得分:6)

假设您没有使用MVVM(看起来不像)并且您使用Page它很容易

ActivityIndicatorListView放在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>

我添加了AbsoluteLayout包裹您的ListViewListView设置为占据AbsoluteLayout的整个区域。此外,我在顶部添加了ActivityIndicator,其中心并且具有默认大小(AbsoluteLayout.LayoutFlags="PositionProportional"AbsoluteLayout.LayoutBounds=".5,.5,-1,-1")。

正如您所看到的herePage公开了IsBusy属性,您可以在页面繁忙时设置该属性,即检索数据或其他内容。我已将IsRunning的{​​{1}}属性绑定到ActivityIndicator,只要IsBusy表示它正忙,就会显示ActivityIndicator

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

async

修改

由于您想知道如何在后台禁用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时显示。