2016-03-23 76 views
2

我已經創建了一個活動指示器並將其添加到StackLayout中,當它運行時,它將顯示在右上角的Android 4.4中,iOS中沒有顯示,並且在Android 6手機中顯示不顯示。如何在屏幕中間顯示ActivityIndi​​cator?

var indicator = new ActivityIndicator() 
      { 
       Color = Color.Blue, 
      }; 
      indicator.SetBinding(ActivityIndicator.IsVisibleProperty, "IsBusy", BindingMode.OneWay); 
      indicator.SetBinding(ActivityIndicator.IsRunningProperty, "IsBusy", BindingMode.OneWay); 
AbsoluteLayout.SetLayoutFlags(indicator, AbsoluteLayoutFlags.PositionProportional); 
      AbsoluteLayout.SetLayoutBounds(indicator, new Rectangle(0.5, 0.5, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize)); 
mainLayout.Children.Add(indicator); 

我想將活動指示器顯示在屏幕中央,因爲操作需要時間才能完成。

回答

8

您在狀態欄中看到的指示符是基本頁類的IsBusy屬性的默認行爲。代碼不起作用的原因是因爲您試圖將ActivityIndicator的可見性綁定到該屬性 - 但您沒有指定綁定源。如果您查看調試器的應用程序輸出日誌,那麼您可能會在「Object」類型中找不到「Property」IsBusy「的消息。

要解決這個問題,您只需將每個綁定的綁定上下文指向表單即可。試試看:

public partial class App : Application 
{ 
    public App() 
    { 
     var mainLayout = new AbsoluteLayout(); 
     MainPage = new ContentPage { 
      Content = mainLayout 
     }; 

     var containerPage = Application.Current.MainPage; 

     var indicator = new ActivityIndicator() { 
      Color = Color.Blue, 
     }; 
     indicator.SetBinding(VisualElement.IsVisibleProperty, new Binding("IsBusy", BindingMode.OneWay, source: containerPage)); 
     indicator.SetBinding(ActivityIndicator.IsRunningProperty, new Binding("IsBusy", BindingMode.OneWay, source: containerPage)); 
     AbsoluteLayout.SetLayoutFlags(indicator, AbsoluteLayoutFlags.PositionProportional); 
     AbsoluteLayout.SetLayoutBounds(indicator, new Rectangle(0.5, 0.5, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize)); 
     mainLayout.Children.Add(indicator); 

     containerPage.IsBusy = true; 
    } 
} 
0

您將活動指示符添加到堆棧佈局,但是您正在設置絕對佈局LayoutFlags,它們將不起作用。

能夠達到你想要什麼,你需要吸結構

AbsoluteLayout 
     StackLayout 
     ActivityIndicator 

mainLayout應該AbsoluteLayout,所有的內容應包含在嵌套StackLayout。

相關問題