【问题标题】:How to handle GoBack in the Navigation Drawer in Windows Phone 8.1?如何在 Windows Phone 8.1 的导航抽屉中处理 GoBack?
【发布时间】:2015-04-19 17:33:14
【问题描述】:

我正在使用此第三方控件开发应用程序: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;
        }
    }
}

我尝试了不同的想法,例如添加公共变量,删除 else(它不起作用,因为后来它自动关闭了框架)。也许任何人都知道如何解决它,因为我希望先关闭抽屉,然后再回到前一帧,它总是将我重定向到第一个。

感谢您的宝贵时间。

【问题讨论】:

  • 您是否在 OnNaviatedFrom 方法中取消注册硬件后台? HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
  • 我不知道该怎么做。你能给我一个想法吗?
  • 您是否在项目中使用了多个框架?还是一帧内有多个页面?

标签: c# windows-runtime windows-phone-8.1


【解决方案1】:

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

【讨论】:

  • 感谢它的工作!但是,如果有人也使用此控件,请务必说必须在任何地方进行此更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多