如何在 Windows Phone 8.1 中处理导航抽屉中的返回?
How to handle GoBack in the Navigation Drawer in Windows Phone 8.1?
我正在使用这个第三方控件开发应用程序:DrawerLayout for Windows Phone 8.1
我遇到了一些问题,因为大多数示例在关闭抽屉后完成了应用程序,但是我有几个框架,我需要返回到前一个而不是第一个。
我认为我的主要问题是因为首先我用这个众所周知的代码覆盖了 App.xaml.cs 中的后退按钮:
public App()
{
this.InitializeComponent();
this.Suspending += this.OnSuspending;
this.Suspending += this.OnSuspending;
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
Frame frame = Window.Current.Content as Frame;
if (frame == null)
return;
if (frame.CanGoBack)
{
frame.GoBack();
e.Handled = true;
}
}
然而,当我实现抽屉时,我需要添加类似这样的东西来处理硬件后退按钮:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
if (DrawerLayout.IsDrawerOpen)
{
DrawerLayout.CloseDrawer();//Close drawer on back press
e.Handled = true;
}
else
{
Frame frame = Window.Current.Content as Frame;
if (frame == null)
return;
if (frame.CanGoBack)
{
frame.GoBack();
e.Handled = true;
}
}
}
我尝试了不同的想法,比如添加一个 public 变量,删除 else(它没有用,因为后来它自动关闭了框架)。也许任何人都知道如何修复它,因为我希望第一个关闭抽屉然后返回到上一个框架,它总是将我重定向到第一个框架。
感谢您宝贵的时间。
Actullay OnNavigateTo
方法在框架导航到(打开)时调用,OnNavigatedFrom
方法在框架关闭时调用。您需要在 OnNavigateTo
上注册 Hardware backpress 并在 OnNavigateFrom
上注销它。
看例子:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
}
我正在使用这个第三方控件开发应用程序:DrawerLayout for Windows Phone 8.1
我遇到了一些问题,因为大多数示例在关闭抽屉后完成了应用程序,但是我有几个框架,我需要返回到前一个而不是第一个。
我认为我的主要问题是因为首先我用这个众所周知的代码覆盖了 App.xaml.cs 中的后退按钮:
public App()
{
this.InitializeComponent();
this.Suspending += this.OnSuspending;
this.Suspending += this.OnSuspending;
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
Frame frame = Window.Current.Content as Frame;
if (frame == null)
return;
if (frame.CanGoBack)
{
frame.GoBack();
e.Handled = true;
}
}
然而,当我实现抽屉时,我需要添加类似这样的东西来处理硬件后退按钮:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
if (DrawerLayout.IsDrawerOpen)
{
DrawerLayout.CloseDrawer();//Close drawer on back press
e.Handled = true;
}
else
{
Frame frame = Window.Current.Content as Frame;
if (frame == null)
return;
if (frame.CanGoBack)
{
frame.GoBack();
e.Handled = true;
}
}
}
我尝试了不同的想法,比如添加一个 public 变量,删除 else(它没有用,因为后来它自动关闭了框架)。也许任何人都知道如何修复它,因为我希望第一个关闭抽屉然后返回到上一个框架,它总是将我重定向到第一个框架。
感谢您宝贵的时间。
Actullay OnNavigateTo
方法在框架导航到(打开)时调用,OnNavigatedFrom
方法在框架关闭时调用。您需要在 OnNavigateTo
上注册 Hardware backpress 并在 OnNavigateFrom
上注销它。
看例子:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
}