none
Fechar aplicação silverlight for windows phone 7 RRS feed

  • Pergunta

  • Prezados,

    Gostaria de saber se existe algum método para windows phone que substitua o Close(), do windows form, pois preciso de um botão para encerrar a aplicação e não encontrei este método em lugar nenhum.

    segunda-feira, 4 de junho de 2012 20:42

Respostas

  • Infelizmente não existe... a única forma é usando o botão de hardware "Back", que quando está na primeira página da stack de navegação, simplesmente fecha a mesma aplicação!

    Apenas uma excepção não tratada faz com que a aplicação termine, mas isso muito provavelmente levará a graves problemas depois de publicada a aplicação!


    Pedro Lamas
    DevScope | Senior Software Development Engineer & WP7 Development Speaker
    www.pedrolamas.com | @pedrolamas

    terça-feira, 5 de junho de 2012 10:06
  • Isso sim, podes usar o seguinte código:

    while (NavigationService.CanGoBack)
    {
        NavigationService.RemoveBackEntry();
    }

    Podes mesmo fazer desde código em conjunto com o "Back" da seguinte forma:

    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
    {
        if (MessageBox.Show("Do you want to exit the application?", "Exit", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
        {
            while (NavigationService.CanGoBack)
            {
                NavigationService.RemoveBackEntry();
            }
        }
        else
        {
            e.Cancel = true;
        }
    
        base.OnBackKeyPress(e);
    }


    Pedro Lamas
    DevScope | Senior Software Development Engineer & WP7 Development Speaker
    www.pedrolamas.com | @pedrolamas

    terça-feira, 5 de junho de 2012 10:29

Todas as Respostas

  • Infelizmente não existe... a única forma é usando o botão de hardware "Back", que quando está na primeira página da stack de navegação, simplesmente fecha a mesma aplicação!

    Apenas uma excepção não tratada faz com que a aplicação termine, mas isso muito provavelmente levará a graves problemas depois de publicada a aplicação!


    Pedro Lamas
    DevScope | Senior Software Development Engineer & WP7 Development Speaker
    www.pedrolamas.com | @pedrolamas

    terça-feira, 5 de junho de 2012 10:06
  • Muito obrigado pela resposta Pedro, mas já que não existe como encerrar a aplicação via código, existe alguma forma de remover o historico do app para que a página que eu esteja sejá considerada a primeira pagina do aplicativo?
    terça-feira, 5 de junho de 2012 10:26
  • Isso sim, podes usar o seguinte código:

    while (NavigationService.CanGoBack)
    {
        NavigationService.RemoveBackEntry();
    }

    Podes mesmo fazer desde código em conjunto com o "Back" da seguinte forma:

    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
    {
        if (MessageBox.Show("Do you want to exit the application?", "Exit", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
        {
            while (NavigationService.CanGoBack)
            {
                NavigationService.RemoveBackEntry();
            }
        }
        else
        {
            e.Cancel = true;
        }
    
        base.OnBackKeyPress(e);
    }


    Pedro Lamas
    DevScope | Senior Software Development Engineer & WP7 Development Speaker
    www.pedrolamas.com | @pedrolamas

    terça-feira, 5 de junho de 2012 10:29
  • Valeu Pedro, com esse código consegui resolver o meu problema.
    terça-feira, 5 de junho de 2012 10:43
  • Essa história de que não dá pra fechar um aplicativo depende do ponto de vista.

    Se for tratar os dados antes de fechar, faça isso e depois lance uma exceção.

    Por exemplo:

    private void mnSair_Click(object sender, EventArgs e)
            {
                var result = MessageBox.Show("deseja sair do aplicativo ?",
                                             "seu aplicativo", MessageBoxButton.OKCancel);

                if (result == MessageBoxResult.OK)
                {
                    // Do not cancel navigation
                    while (NavigationService.BackStack.Any())
                    {
                        NavigationService.RemoveBackEntry();
                    }                
                    base.OnBackKeyPress(new CancelEventArgs());

                    // TRATAR AQUI O ARMAZENAMENTO DE DADOS ANTES DE SAIR

                    int zero = 0;
                    var res = 1 / zero;
                }
            }

    quarta-feira, 26 de dezembro de 2012 23:32