Ich habe die folgende Methode in einem Xamarin.Forms.ContentPage
mit einer Schaltfläche verbundenen Ereignis
public class LoginPage : ContentPage
{
private Button _loginButton = null;
private Entry _PasswordInput = null;
private Entry _UsernameInput = null;
public LoginPage()
{
_UsernameInput = new Entry { Placeholder = "Username" };
_PasswordInput = new Entry { Placeholder = "Password", IsPassword = true };
_loginButton = new Button
{
Text = "Login",
BorderRadius = 5
}
_loginButton.Clicked += LogIn;
Content = new StackLayout
{
VerticalOptions = LayoutOptions.Center,
Children =
{
_UsernameInput, _PasswordInput, _loginButton,
},
Spacing = 15
};
}
public async void LogIn(object sender, EventArgs eventsArgs)
{
//do authenticate stuff here
SSO.MyAuthentication client = new SSO.MyAuthentication();
bool isAuthenticated = client.Authenticate(_UsernameInput.Text, _PasswordInput.Text);
if(isAuthenticated)
{
//Push home page to top of navigation stack
Navigation.PushAsync(new HomePage());
}
}
}
In der folgenden Codezeile Navigation.PushAsync(new HomePage());
wird beim Debuggen die folgende Ausnahme angezeigt:
PushAsync wird unter Android nicht global unterstützt. Verwenden Sie eine Navigationsseite
Wie löse ich dieses Problem mithilfe eines Xamarin.Forms.NavigationPage
Objekts?
navigation
xamarin
xamarin.android
xamarin.forms
Michael Kniskern
quelle
quelle
In der Datei app.xaml.cs
Ersetzen
Mit
Dann benutze
quelle
Sie müssen Ihre LoginPage in eine NavigationPage einschließen. Dadurch wird Ihr Fehler behoben, Sie erhalten jedoch die auf Ihrem Navigationsstapel enthaltene LoginPage.
Ein alternativer Ansatz wäre, Ihre HomePage zum Stammverzeichnis der Anwendung zu machen und dann die LoginPage modal darüber anzuzeigen. Erst wenn sich der Benutzer erfolgreich anmeldet, schließen Sie das LoginPage-Modal, damit er die HomePage sehen kann.
quelle
LoginPage
innerhalb einerNavigationPage
in meinerApp.GetMainPage
Methode? Könnte ich auch die Methode 'Navigation.PopAsync ()' verwenden, um die Anmeldeseite vom Navigationsstapel zu entfernen?LoginPage
Hauptseite für die Anwendung undPushModalAsync
eine neueNavigationPage
mit dem Inhalt der App bei erfolgreicher Anmeldung zu haben.PushModalAsync()
die Anmeldeseite zu laden . Achten Sie nur darauf, dass der Benutzer die Hardware-Zurück-Taste unter Android nicht drückt.public override void OnBackPressed(){ if(user.IsAuthenticated(){base.OnBackPressed();}}
Ich ändere pushAsync nur mit pushModalAsync :)
quelle
Nehmen Sie zuerst die Einstellung in "Haupt-App-Seite" und dann in "Inhaltsseite" vor, um zu einer anderen Seite zu gelangen:
quelle
Ich habe ein Problem beim Mischen von Rg.Plugins.Popup und ZXin.Net.Mobile Scanner.
Das Aufrufen des Scanners in einem Popup löste denselben Fehler aus. PushModalAsync hat den Fehler behoben, aber das Popup war über dem Scan, sodass die einfache Lösung das Popup unsichtbar machte, bis der Scanner eingeschaltet war.
quelle
Stellen Sie sicher, dass auf der vorherigen Seite kein PushModalAsync verwendet wird. Wenn Sie später PushAsync verwenden, wird die Fehlermeldung "PushAsync wird unter Android nicht global unterstützt, verwenden Sie bitte eine Navigationsseite." Angezeigt.
quelle
Überprüfen Sie, ob Sie in der vorherigen Navigation NavigationPage verwenden:
Falsch:
Application.Current.MainPage = new LoginPage();
Richtig:
Application.Current.MainPage = new NavigationPage(new LoginPage());
quelle
Wenn Sie hinzufügen (in " öffentliche Teilklassen-App "):
Sie können verwenden:
Warten Sie auf Navigation.PushAsync (neues BleBleBle ());
quelle