如何处理UWP按下的后退按钮

时间:2015-11-06 16:58:44

标签: windows-10 windows-10-mobile

我以前在Windows Phone 8.1 XAML中使用硬件按钮API。但是,在UWP中,有些设备没有后退按钮。我如何适应新的应用模式?

3 个答案:

答案 0 :(得分:3)

有点解释答案。 您可以使用Windows.UI.Core Windows.UI.Core命名空间

单页

如果您只想处理单页导航。请按照以下步骤进行操作

第1步。使用名称空间using Windows.UI.Core;

InitializeComponent()

第2步。注册当前视图的请求事件。最好的地方是public MainPage() { this.InitializeComponent(); //register back request event for current view SystemNavigationManager.GetForCurrentView().BackRequested += MainPage_BackRequested; } 之后的类的主要构造函数。

private void Food_BackRequested(object sender, BackRequestedEventArgs e)
{
    if (Frame.CanGoBack)
    {
        Frame.GoBack();
        e.Handled = true;
    }
}

第3步。处理BackRequested事件

rootFrame

单个App.xaml.cs

在一个地方完成申请

处理所有视图的所有后退按钮的最佳位置是Windows.UI.Core

第1步。使用名称空间using Windows.UI.Core;

OnLaunched

第2步。注册当前视图的请求事件。最好的地方是Window.Current.Activate

之前的protected override void OnLaunched(LaunchActivatedEventArgs e) { ... SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested; Window.Current.Activate(); }
private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;
    if (rootFrame.CanGoBack)
    {
        rootFrame.GoBack();
        e.Handled = true;
    }
}

第3步。处理BackRequested事件

</ul

参考文献 - SystemNavigationManager

希望这对某人有帮助!

答案 1 :(得分:2)

您可以使用BackRequested事件来处理后退请求:

SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;

if (App.MasterFrame.CanGoBack)
{
    rootFrame.GoBack();
    e.Handled = true;
}

答案 2 :(得分:0)

上面的代码完全正确但你必须在rootFrame变量中添加frame的对象。以下是:

private Frame _rootFrame;
 protected override void OnLaunched(LaunchActivatedEventArgs e)
 { 
        Frame rootFrame = Window.Current.Content as Frame;
        if (Window.Current.Content==null)
        {
            _rootFrame = new Frame();
        }
}

并将此_rootFrame传递给OnBackRequested方法。像:

 private void OnBackRequested(object sender, BackRequestedEventArgs 
 {
       if (_rootFrame.CanGoBack)
       {
            _rootFrame.GoBack();
            e.Handled = true;
       }
 }