Pergunta

Eu tenho um aplicativo universal do Windows Phone (iniciado a partir do modelo Blank App) que consiste em uma MainPage e três páginas secundárias.A navegação entre eles está funcionando conforme o esperado (graças, em parte, esta página do MSDN).

O problema que estou enfrentando é que, quando estou na página principal, quando os usuários pressionam o botão Voltar do hardware, meu aplicativo é colocado em segundo plano, mas o cartão do meu aplicativo permanece no alternador de tarefas.Isso acontece independentemente de o depurador estar conectado ou não.

Tentei isso em um novo projeto baseado no modelo Pivot App (WP) e vejo o mesmo problema.

Quero "fechar" meu aplicativo quando o usuário pressionar Voltar na página principal, para que ele não esteja mais no alternador de tarefas.Há algo que preciso fazer manualmente?

Foi útil?

Solução

Você pode sair do seu aplicativo com Application.Current.Exit();na função HardwareButtons_BackPressed abaixo.

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

eu espero que isso funcione

Atenciosamente, cristão

Outras dicas

Foi assim que acabei implementando, com as dicas de user2799780 e Romasz, embora não tenha 100% de certeza de que não estou (des) registrando duas vezes o manipulador. Depende se sempre existe um NavigatedFrom para cada NavigatedTo, eu acho.

EDITAR:Fui lembrado (ver comentários) que ao ser suspenso, um aplicativo recebe o evento OnNavigatedFrom, mas ao retomar, não verá o evento OnNavigatedTo, fazendo com que o manipulador não seja registrado nesse caso. A implementação abaixo provavelmente foi afetada por este bug.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top