Pregunta

Tengo una aplicación universal de Windows Phone (comenzó desde la plantilla de la aplicación en blanco) que consiste en una página principal y tres páginas secundarias.La navegación entre estos está funcionando como se espera (gracias a, en parte, Esta página de MSDN ).

El problema en el que estoy encontrando es que cuando está en la página principal, cuando los usuarios presionan el botón Atrás de hardware, mi aplicación se pone en el fondo, pero la tarjeta para mi aplicación permanece en el conmutador de tareas.Esto sucede independientemente de si el depurador está conectado o no.

Intenté esto en un nuevo proyecto basado en la plantilla de la aplicación Pivot (WP), y veo el mismo problema.

Quiero "cerrar" mi aplicación cuando el usuario presiona de nuevo de la página principal, para que ya no esté en el conmutador de tareas.¿Hay algo que necesito hacer manualmente?

¿Fue útil?

Solución

Puede salir de su aplicación con la aplicación.current.exit ();en la función HardwareButtons_Pressed a continuación.

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

Espero que esto funcione

Saludos, Cristiano

Otros consejos

Así es como terminé implementándolo, con los punteros de User2799780 y ROMASZ, aunque no estoy 100% seguro de que no soy doble (ONU) que registre el controlador. depende de si siempre hay un navegado desde cada navegado, supongo.

Editar: Me han recordado (ver comentarios) que cuando se suspende, una aplicación recibe el evento onnavigatedfrom, pero cuando se reanuda, no verá un evento onnavigedto, lo que hace que el manejador no esté registrado enEse caso. La siguiente implementación probablemente se ve afectada por este error .

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top