Question

J'ai une application universelle Windows Phone (démarré à partir du modèle d'application vierge) composée d'un empiècement et de trois pages secondaires.La navigation entre celles-ci fonctionne comme prévu (grâce à, en partie, Cette page MSDN ).

Le problème que je rencontre est que lorsque sur le point de vue principal, lorsque les utilisateurs appuitent le bouton du matériel arrière, mon application est mise en arrière-plan, mais la carte de mon application reste dans le commutateur de tâches.Cela se produit, que le débogueur soit attaché ou non.

J'ai essayé cela dans un nouveau projet basé sur le modèle Pivot App (WP) et je vois le même problème.

Je veux "fermer" mon application lorsque l'utilisateur appuie sur le MAINPAGE, de sorte qu'il ne soit plus dans le commutateur de tâche.Y a-t-il quelque chose que je dois faire manuellement?

Était-ce utile?

La solution

Vous pouvez quitter votre application avec application.Current.exit ();dans la fonction HardwareButTons_backprimé ci-dessous.

public MainPage()
{
    Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}

private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
    /* When you don't know the namespace you can use this code instead of the lower

    string[] Namespace = Frame.CurrentSourcePageType.FullName.Split('.');
    if (!e.Handled && Frame.CurrentSourcePageType.FullName == Namespace[0] + ".MainPage")
            Application.Current.Exit();
    */
    if (!e.Handled && Frame.CurrentSourcePageType.FullName == "NAMESPACE.MainPage")
        Application.Current.Exit();
}

J'espère que cela fonctionne

Cordialement, Christian

Autres conseils

Voici comment j'ai fini de la mettre en œuvre, avec les pointeurs de User2799780 et de Romasz, bien que je ne sois pas à 100% sûr de ne pas double- (ONU) enregistrant le gestionnaire. Cela dépend de la question de savoir s'il est toujours navigué pour chaque navigation, je suppose.

Edit: On m'a rappelé (voir les commentaires) que lors de la suspension, une application reçoit l'événement Onnavigatedfrom, mais lors de la reprise, il ne verra pas un événement OnnavigateDo, ce qui entraîne le gestionnaire de ne pas être enregistré dansce cas. La mise en œuvre ci-dessous est probablement affectée par ce bogue .

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    // When we're on this page, pressing Back should close the app
    Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}

protected override async void OnNavigatedFrom(NavigationEventArgs e)
{
    // When we leave this page, pressing Back should no longer close the app
    Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
}

private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
    if (!e.Handled)
    {
        Application.Current.Exit();
    }
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top