簡體   English   中英

如何在Xamarin.Forms中為輪播實現活動指示器?

[英]How can I implement an Activity Indicator for a Carousel in Xamarin.Forms?

我正在嘗試在啟動“輪播”頁面之前合並一個ActivityIndi​​cator; 這樣,當“輪播”頁面上的內容過多時; 用戶將知道該應用程序仍在加載/尚未掛起。

為了弄清楚這一點,我正在使用使用“輪播”頁面的示例: https : //github.com/chrisriesgo/xamarin-forms-carouselview

我的主要方法是嘗試修改按鈕以在button命令中創建一個ActivityIndi​​cator:

來自“ SwitcherPage.cs”的原始樣本

var none = new Button {
            HorizontalOptions = LayoutOptions.Center,
            Text = "No pager indicator",
            Command = new Command((obj) => Navigation.PushAsync(new HomePage(CarouselLayout.IndicatorStyleEnum.None)))
        };

我的嘗試

var indicator = new ActivityIndicator ();

        var none = new Button {
            HorizontalOptions = LayoutOptions.Center,
            Text = "No pager indicator",
            Command = new Command(
                indicator.IsRunning,
                indicator.IsVisible,
                Task.Delay(2500), // to simulate a long loading time
                (obj) => Navigation.PushAsync(new HomePage(CarouselLayout.IndicatorStyleEnum.None)))
        };

到目前為止我所知道的

Intellisense已經在告訴我這是錯誤的。 我不能以這種方式在命令中定義它。 但是希望這可以說明我正在嘗試做的事情; 本質上是在等待頁面加載時觸發活動指示器。

我已經在ActivityIndi​​cator上尋找了常規資源,但問題是我還沒有找到可以在等待輪播頁面加載后如何將其轉換為可以在按下按鈕后激活的東西。

https://developer.xamarin.com/api/type/Xamarin.Forms.ActivityIndi​​cator/ http://forums.xamarin.com/discussion/34502/xamarin-forms-activity-indicator Xamarin.Forms-如何覆蓋ActivityIndi​​cator以編程方式在StackLayout中

我不確定我是否正確理解了您的問題,但是:

    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屬性設置適當的綁定並從那里進行操作會更加干凈。

另一個解決方案,使用Device.StartTimer

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;
        });
    });

};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM