如何在Xamarin.Forms中实现旋转木马的活动指示器?

本文关键字:旋转木马 活动 指示器 实现 Xamarin Forms | 更新日期: 2023-09-27 18:11:08

我试图在启动Carousel页面之前合并一个ActivityIndicator;这样,当Carousel页面内容繁重时;用户将知道应用程序仍在加载/尚未挂起。

为了弄清楚这一点,我从这个使用Carousel页面的示例中工作:https://github.com/chrisriesgo/xamarin-forms-carouselview

我的主要方法是试图修改按钮,以在按钮命令中创建一个ActivityIndicator:

来自"SwitcherPage.cs"的原始样本

var none = new Button {
            HorizontalOptions = LayoutOptions.Center,
            Text = "No pager indicator",
            Command = new Command((obj) => Navigation.PushAsync(new HomePage(CarouselLayout.IndicatorStyleEnum.None)))
        };
<标题>我尝试h1> 前我所知道的

智能感知已经告诉我这是错误的;我不能在命令中这样定义它。但希望这能说明我要做的;在等待页面加载时触发一个活动指示器。

我已经在ActivityIndicator上寻找了一般资源,但问题是我没有发现任何我可以弄清楚如何将其转换为在等待Carousel页面加载时按下按钮后将激活的东西。

https://developer.xamarin.com/api/type/Xamarin.Forms.ActivityIndicator/http://forums.xamarin.com/discussion/34502/xamarin-forms-activity-indicatorXamarin的。窗体-如何以编程方式在StackLayout的中间叠加一个ActivityIndicator

如何在Xamarin.Forms中实现旋转木马的活动指示器?

我不确定我是否正确理解了你的问题,但是:

    var indicator = new ActivityIndicator ();
    var none = new Button {
        HorizontalOptions = LayoutOptions.Center,
        Text = "No pager indicator",
        Command = new Command(async() => {
            indicator.IsRunning = true;
            indicator.IsVisible = true;
            await Task.Delay(2500);
            indicator.IsRunning = false;
            indicator.IsVisible = false;
            Navigation.PushAsync(new HomePage(CarouselLayout.IndicatorStyleEnum.None));
        })
    };

但是设置适当的绑定到你的ViewModel属性并从那里做事情会干净得多。

另一个解决方案,使用设备。开始时间

var indicator = new ActivityIndicator ();
var none = new Button {
    HorizontalOptions = LayoutOptions.Center,
    Text = "No pager indicator",
    Command = new Command(() => {
        indicator.IsRunning = true;
        indicator.IsVisible = true;
        Device.StartTimer(Timespan.FromSeconds(2.5),()=>
        {
            indicator.IsRunning = false;
            indicator.IsVisible = false;
            Navigation.PushAsync(new HomePage(CarouselLayout.IndicatorStyleEnum.None));
            return false;
        });
    });
};