it-swarm.com.de

Handhabung der Rückwärtsnavigation Windows 10 (UWP)

In meiner Xaml-Seite habe ich einen Frame.

Ich versuche, ein backButton-Ereignis zu haben, um nur innerhalb des Rahmens zu navigieren.

also habe ich versucht, diesen Code zu verwenden

public MainPage(){
    this.InitializeComponent();
    if(Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons")) {
        Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
    }
}
private void HardwareButtons_BackPressed(object sender,BackPressedEventArgs e) {
    if(insideFrame.CanGoBack())insideFrame.GoBack();
    else  Application.Current.Exit();
}

aber im Telefon nach dem HardwareButtons_BackPressed-Ereignis wird die Anwendung geschlossen.

Es scheint, dass auf MainPage ein gewisses Standardverhalten der Zurückschaltflächen ausgeführt wird ...

Wie kann ich es reparieren? Und in Windows10 fügen sie neue Ereignisse hinzu, um die Rückwärtsnavigation zu handhaben?


[Aktualisieren]

Jetzt habe ich herausgefunden, dass es besser ist, SystemNavigationManager in Windows 10 anstelle von Input.HardwareButtons.BackPressed zu verwenden.

SystemNavigationManager currentView = SystemNavigationManager.GetForCurrentView();
15
Shahriar

Sie müssen dem System mitteilen, dass Sie das Drücken der Rücktaste ausgeführt haben, indem Sie die Eigenschaft Handled von BackPressedEventArgs auf true setzen.

  private void OnHardwareButtonsBackPressed(object sender, BackPressedEventArgs e)
  {
        // This is the missing line!
        e.Handled = true;

        // Close the App if you are on the startpage
        if (mMainFrame.CurrentSourcePageType == typeof(Startpage))
            App.Current.Exit();

        // Navigate back
        if (mMainFrame.CanGoBack)
        {
            mMainFrame.GoBack();
        }
  }
7
Tobias Hoefer

Windows 10 (UWP) enthält SystemNavigationManager im Windows.UI.Core-Namespace nur für Navigationszwecke. 

Da SystemNavigationManager Teil von Windows Universal Platform ist, wird sie von allen Gerätefamilien unterstützt, die unter Windows 10 ausgeführt werden, einschließlich Mobile und PC.

Für eine einzelne Seite


Wenn Sie nur die Navigation für eine einzelne Seite durchführen möchten. Folgen Sie den folgenden Schritten

Schritt 1. Namensraum Windows.UI.Core verwenden 

using Windows.UI.Core;

Schritt 2. Registrieren Sie das Anforderungsereignis für die aktuelle Ansicht zurück. Der beste Ort dafür ist der Hauptkonstruktor der Klasse nach InitializeComponent().

public MainPage()
{
    this.InitializeComponent();
    //register back request event for current view
    SystemNavigationManager.GetForCurrentView().BackRequested += MainPage_BackRequested;
}

Schritt 3. Handle BackRequested-Ereignis

private void Food_BackRequested(object sender, BackRequestedEventArgs e)
{
    if (Frame.CanGoBack)
    {
        Frame.GoBack();
        e.Handled = true;
    }
}

Für die vollständige Anwendung an einer Stelle für einzelne rootFrame


Der beste Ort für die Behandlung aller Rücktasten für alle Ansichten ist App.xaml.cs.

Schritt 1. Namensraum Windows.UI.Core verwenden 

using Windows.UI.Core;

Schritt 2. Registrieren Sie das Anforderungsereignis für die aktuelle Ansicht zurück. Der beste Ort dafür ist OnLaunched kurz vor Window.Current.Activate

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    ...
    SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
    Window.Current.Activate();
}

Schritt 3. Handle BackRequested-Ereignis

private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;
    if (rootFrame.CanGoBack)
    {
        rootFrame.GoBack();
        e.Handled = true;
    }
}

Referenzen- In UWP gedrückte Rücktaste

Hoffe, das ist jemandem hilfreich!

20

folge diesen Schritten:

  • Fügen Sie Ihrer Seite zwei globale Variablen hinzu (siehe unten).

    private NavigationHelper navigationHelper;
    private RelayCommand _GoBackCommand;
    
  • Fügen Sie dann im Konstruktor einer bestimmten Seite den Code hinzu.

        // below code is to override the back navigation
        // hardware back button press event from navigationHelper
        _GoBackCommand = new RelayCommand
            (
                () => this.CheckGoBack(),
                () => this.CanCheckGoBack()
            );
    
        navigationHelper.GoBackCommand = _GoBackCommand;
        // ---------
    
  • Fügen Sie dann beide Methoden hinzu, die wir gerade im Konstruktor deklariert haben.

    private bool CanCheckGoBack()
    {
        // this should be always true to make sure the app handles back buton manually.
        return true;
    }
    
    private void CheckGoBack()
    {
        // this will be execute when back button will be pressed
    }
    

ps. - Dazu müssen Sie möglicherweise BasicPage anstelle von BlankPage verwenden, wenn Sie eine neue Seite hinzufügen.

hoffe das wird helfen ..!

0
Keval Langalia

Probieren Sie dies aus. Es funktioniert für die Rückwärtsnavigation.

  protected override void OnNavigatedTo(NavigationEventArgs e)
    {

      HardwareButtons.BackPressed += HardwareButtons_BackPressed;

    }


    void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
    {

    Frame rootFrame = Window.Current.Content as Frame;

        if (Frame.CanGoBack)
        {
            e.Handled = true;
            Frame.GoBack();
        }
    }

}
0
Husain Ahamed