1

我有一个由 MainPage 和三个辅助页面组成的通用 Windows Phone 应用程序(从 Blank App 模板开始)。这些导航按预期工作(部分归功于此 MSDN 页面)。

我遇到的问题是,在 MainPage 上,当用户按下硬件后退按钮时,我的应用程序被置于后台,但我的应用程序的卡仍保留在任务切换器中。无论是否附加了调试器,都会发生这种情况。

我在一个基于 Pivot App (WP) 模板的新项目中尝试了这个,我看到了同样的问题。

当用户从 MainPage 按下 Back 时,我想“关闭”我的应用程序,以便它不再位于任务切换器中。有什么我需要手动做的吗?

4

2 回答 2

2

您可以使用 Application.Current.Exit(); 退出您的应用程序;在下面的 HardwareButtons_BackPressed 函数中。

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

我希望这有效

问候, 克里斯蒂安

于 2014-06-03T23:33:47.727 回答
0

这就是我最终实现它的方式,使用来自 user2799780 和 Romasz 的指针,尽管我不能 100% 确定我没有双重(取消)注册处理程序。我猜这取决于每个 NavigatedTo 是否总是有一个 NavigatedFrom。

编辑:我被提醒(见评论),当被暂停时,应用程序会收到 OnNavigatedFrom 事件,但在恢复时,它不会看到 OnNavigatedTo 事件,导致在这种情况下无法注册处理程序。下面的实现可能会受到这个错误的影响

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();
    }
}
于 2014-06-04T16:43:30.897 回答