Windows UWP app移动后退按钮无法正常工作

时间:2016-01-29 02:58:44

标签: windows uwp

我正在使用这个记录完备的解决方案为我们的应用添加一个后退按钮。当应用程序初始化时,我正在设置这样的东西:

    Windows.UI.Core.SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;

         Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested += CreateNewKeyView_BackRequested;

private void CreateNewKeyView_BackRequested(object sender, BackRequestedEventArgs e)
            {
                NavigationService.Instance.GoBack();    
            }

后退按钮显示在桌面应用程序上,按预期工作,将我们的框架导航回以前的页面。

但是,在Windows Phone上,硬件按钮才会退出应用程序。我发现这样的代码的各个地方都说这应该适用于移动硬件按钮,但它根本不适用于我们。

3 个答案:

答案 0 :(得分:2)

您应该在e.Handled = true方法中设置CreateNewKeyView_BackRequested

答案 1 :(得分:1)

不知道你是如何为NavigationService编码的,我刚刚测试了以下代码,它在我这边工作:

private void CreateNewKeyView_BackRequested(object sender, BackRequestedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;
    if (rootFrame != null)
    {
        if (rootFrame.CanGoBack)
        {
            e.Handled = true;
            rootFrame.GoBack();
        }
    }
}

或者,对于手机,我们还使用Hardware Buttons的特殊API。

您可以使用OnLaunched方法判断使用手机Api的电流是否正确:

if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))
{
    Windows.Phone.UI.Input.HardwareButtons.BackPressed += OnBackPressed;
}

然后完成OnBackPressed方法:

public void OnBackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;
    if (rootFrame != null)
    {
        if (rootFrame.CanGoBack)
        {
            e.Handled = true;
            rootFrame.GoBack();
        }
    }
}

要执行此操作,首先需要在项目中添加Windows Mobile Extensions for the UWP引用。

答案 2 :(得分:1)

这是

private void CreateNewKeyView_BackRequested(object sender, BackRequestedEventArgs e) //event handle nya untuk backbutton
        {
            var frame = ((Frame)Window.Current.Content);
            if (frame.CanGoBack)
            {
                frame.GoBack();
                e.Handled = true;
            }

        }