Comment supprimer mon application de la commutateur de tâche sur Windows Phone?
-
21-12-2019 - |
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?
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();
}
}