如何处理为 UWP 按下的后退按钮
How to handle back button pressed for UWP
我曾经在 Windows Phone 8.1 XAML 中使用硬件按钮 API。但是,在 UWP 中,某些设备没有后退按钮。如何适应新的应用模式?
您可以使用 BackRequested 事件来处理返回请求:
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
if (App.MasterFrame.CanGoBack)
{
rootFrame.GoBack();
e.Handled = true;
}
稍微解释一下答案。
您可以使用 SystemNavigationManager of Windows.UI.Core
命名空间
对于单页
如果您只想处理单个页面的导航。按照以下步骤
步骤 1。使用命名空间 Windows.UI.Core
using Windows.UI.Core;
步骤2.为当前视图注册返回请求事件。最好的地方是在 InitializeComponent()
.
之后 class 的主要构造函数
public MainPage()
{
this.InitializeComponent();
//register back request event for current view
SystemNavigationManager.GetForCurrentView().BackRequested += MainPage_BackRequested;
}
步骤 3. 处理 BackRequested 事件
private void Food_BackRequested(object sender, BackRequestedEventArgs e)
{
if (Frame.CanGoBack)
{
Frame.GoBack();
e.Handled = true;
}
}
一个地方的完整申请 rootFrame
处理所有视图的所有后退按钮的最佳位置是 App.xaml.cs
步骤 1。使用命名空间 Windows.UI.Core
using Windows.UI.Core;
步骤2.为当前视图注册返回请求事件。最好的位置是 OnLaunched
就在 Window.Current.Activate
之前
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
...
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
Window.Current.Activate();
}
步骤 3. 处理 BackRequested 事件
private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame.CanGoBack)
{
rootFrame.GoBack();
e.Handled = true;
}
}
参考资料- Handle back button pressed in UWP
希望这对某人有帮助!
上面的代码完全正确,但是你必须在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;
}
}
我曾经在 Windows Phone 8.1 XAML 中使用硬件按钮 API。但是,在 UWP 中,某些设备没有后退按钮。如何适应新的应用模式?
您可以使用 BackRequested 事件来处理返回请求:
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
if (App.MasterFrame.CanGoBack)
{
rootFrame.GoBack();
e.Handled = true;
}
稍微解释一下答案。
您可以使用 SystemNavigationManager of Windows.UI.Core
命名空间
对于单页
如果您只想处理单个页面的导航。按照以下步骤
步骤 1。使用命名空间 Windows.UI.Core
using Windows.UI.Core;
步骤2.为当前视图注册返回请求事件。最好的地方是在 InitializeComponent()
.
public MainPage()
{
this.InitializeComponent();
//register back request event for current view
SystemNavigationManager.GetForCurrentView().BackRequested += MainPage_BackRequested;
}
步骤 3. 处理 BackRequested 事件
private void Food_BackRequested(object sender, BackRequestedEventArgs e)
{
if (Frame.CanGoBack)
{
Frame.GoBack();
e.Handled = true;
}
}
一个地方的完整申请 rootFrame
处理所有视图的所有后退按钮的最佳位置是 App.xaml.cs
步骤 1。使用命名空间 Windows.UI.Core
using Windows.UI.Core;
步骤2.为当前视图注册返回请求事件。最好的位置是 OnLaunched
就在 Window.Current.Activate
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
...
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
Window.Current.Activate();
}
步骤 3. 处理 BackRequested 事件
private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame.CanGoBack)
{
rootFrame.GoBack();
e.Handled = true;
}
}
参考资料- Handle back button pressed in UWP
希望这对某人有帮助!
上面的代码完全正确,但是你必须在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;
}
}