Xamarin.Forms - 当视频加载时,使ActivityIndi​​cator消失

时间:2018-04-26 01:27:19

标签: c# xaml xamarin binding xamarin.forms

Xamarin.Forms中,我在加载视频时会弹出ActivityIndicatorlabel。如何在视频完全加载后正确地禁用它?

以下是我的xaml (已更新4/26)

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:PreAppStructure"
         xmlns:roxv="clr-namespace:Rox;assembly=Rox.Xamarin.Video.Portable"
         x:Class="PreAppStructure.Page3"
         Title="Welcome to page 3">
<ContentPage.Content>
    <Grid>

        <roxv:VideoView x:Name="VideoView" AutoPlay="True" LoopPlay="True" ShowController="True" Source="http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4" />

        <StackLayout BackgroundColor="Black" HorizontalOptions="Center" VerticalOptions="Center" IsVisible="True">

            <ActivityIndicator Color="White"
                x:Name="loader"
                IsRunning="{Binding IsBusy}" 
            VerticalOptions="Center" HorizontalOptions="Center"

               />
            <Label x:Name ="loadingtext" Text="Loading...Please wait!" HorizontalOptions="Center" TextColor="White" IsVisible="{Binding IsBusy}"/>

        </StackLayout>

    </Grid>


</ContentPage.Content>

下面是我的C#课程,也是我的几次尝试之一:

...
public partial class Page3 : ContentPage
{
    public Page3 ()
    {

        InitializeComponent ();

        this.BindingContext = this;

        this.IsBusy = true;


        NavigationPage.SetBackButtonTitle(this, "Back");

    }

    async void OnDoSomethingLong()
    {
        if (!this.IsBusy)
        {
            try
            {
                this.IsBusy = true;

                //await long operation here

            }
            finally
            {
                this.IsBusy = false;

                await Task.Run(() => {

                    return VideoView;

                });
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

您应该使用IsVisible属性来隐藏或显示活动指示器

-IsRunning属性用于旋转活动指示器,但它不适用于隐藏或显示活动指示器

  • IsVisible属性用于隐藏或显示它赢得的活动指示器,无论它是否旋转,它只是可见和不可见。

在你的情况下使用你应该同时使用IsVisible属性和IsRunning属性,每当IsBusy为true时,活动指示器是可见的并且它将被旋转,如果它是假的,它将不可见并旋转。

删除stackLayout并将活动指示符添加到Grid的子项。

 <ActivityIndicator Color="White" x:Name="loader" 
 IsRunning="{Binding IsBusy}"
 IsVisible="{Binding IsBusy}"
 VerticalOptions="Center" HorizontalOptions="Center" />