2016-03-23 9 views
2

Ich habe einen Aktivitätsindikator erstellt und StackLayout hinzugefügt und wenn ich es aktiviere, wird es im Emulator in der oberen rechten Ecke Android 4.4 und in iOS nicht angezeigt und in Android 6 Telefon, wird es nicht angezeigt.Wie wird ActivityIndicator in der Mitte des Bildschirms angezeigt?

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

Ich möchte den Aktivitätsindikator in der Mitte des Bildschirms anzeigen, da die Operation Zeit benötigt, um abzuschließen.

Antwort

8

Der Indikator, den Sie in der Statusleiste sehen, ist das Standardverhalten der Eigenschaft IsBusy der Basisseitenklasse. Der Grund, warum Ihr Code nicht funktioniert, ist, dass Sie versuchen, die Sichtbarkeit Ihrer ActivityIndicator an diese Eigenschaft zu binden, aber Sie geben keine Bindungsquelle an. Wenn Sie in das Ausgabeprotokoll Ihrer Debugger-Anwendung schauen, werden Sie wahrscheinlich Nachrichten in der Art von "Property 'IsBusy' nicht im Typ 'Objekt'" finden.

Um es zu beheben, müssen Sie einfach den Bindungskontext jeder Bindung auf das Formular zeigen. Probieren Sie es aus:

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

Sie fügen Ihren Aktivitätsindikator zum Stack-Layout hinzu, aber Sie setzen Absolute Layout LayoutFlags, sie werden nicht funktionieren.

der Lage sein, zu erreichen, was Sie wollen, müssen Sie Struktur

AbsoluteLayout 
     StackLayout 
     ActivityIndicator 

mainLayout AbsoluteLayout sein saugen sollte, sollten alle Inhalte in verschachtelten StackLayout enthalten sein.

Verwandte Themen