【问题标题】:how to override windows back button in windows phone 8 ?如何覆盖 Windows Phone 8 中的 Windows 后退按钮?
【发布时间】:2014-05-06 04:57:50
【问题描述】:

当我从我的应用程序中单击时,我需要覆盖 Windows 后退按钮。我尝试了下面的 2 种方法,但它在 windows phone 8 中不起作用?

方法 1)

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)

            {

           e.Cancel = true;

           var result = MessageBox.Show("Do you want to exit?", "Attention!",
                                      MessageBoxButton.OKCancel);

        if (result == MessageBoxResult.OK)
        {
           // base.OnBackKeyPress(e);
            return;
        }
        e.Cancel = true;
    }

方法2)

a) 在 xaml 标题中写了这个

BackKeyPress="MyBackKeyPress"

b) 在构造函数中初始化 this

 BackKeyPress += OnBackKeyPress;

c) 并调用此方法

   private void MyBackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
    {
        e.Cancel = true; //tell system you have handled it
        //you c
    }

这两种方法都不起作用。当我单击后退按钮时,应用程序被破坏并且无法控制后退按钮。有什么帮助吗?

【问题讨论】:

    标签: c# windows-phone-7 windows-phone-8


    【解决方案1】:

    根据认证要求,不建议覆盖后退按钮 -

    从应用的第一个屏幕按返回按钮必须关闭 应用程序。

    http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh184840%28v=vs.105%29.aspx

    你可以试试这个代码

    protected override void OnBackKeyPress(CancelEventArgs e)
    {
        if(MessageBox.Show("Are you sure you want to exit?","Confirm Exit?", 
                                MessageBoxButton.OKCancel) != MessageBoxResult.OK)
        {
            e.Cancel = true; 
    
        }
    }
    

    【讨论】:

    • 是的,我把代码没有放在起始页中。这是行不通的。我正在使用模拟器进行测试。
    • 您有任何异常吗?崩溃?
    • 应用程序正在退出,没有任何异常并且没有崩溃。
    • 我创建一个新的然后上面的代码工作。但是为什么 ovveride 在当前的应用程序中没有工作。有什么想法吗?
    • 嗯,您可以尝试在不添加任何代码的情况下进行调试,覆盖应该可以工作。尝试关闭 IDE 并重新打开。还要从模拟器中卸载应用程序并尝试调试它。
    【解决方案2】:

    试试这个,对我有用

    第 1 步:在 XAML 中

    BackKeyPress="PhoneApplicationPage_BackKeyPress"
    

    第 2 步:在 C# 中

    private void PhoneApplicationPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
            {
                MessageBoxResult mRes = MessageBox.Show("Would you like to exit?", "Exit", MessageBoxButton.OKCancel);
                if (mRes == MessageBoxResult.OK)
                {
                    NavigationService.GoBack();
                }
                if (mRes == MessageBoxResult.Cancel)
                {
                    e.Cancel = true;
                }
            }
    

    【讨论】:

    • 我也试过了。但它不工作。我将断点放在代码中,当我单击返回按钮时,也发现它没有进入或没有调用函数。
    • 是的,我从 [link] stackoverflow.com/questions/17397163/… [link] 得到了解决方案......它与(5.2.4.3)上下文路径相关的问题......谢谢..
    【解决方案3】:

    在您的MyBackKeyPress 方法中,抛出一个新异常以在运行时关闭应用程序并返回手机菜单。我不知道这是否是实现它的好方法,但这绝对可以解决问题。

    private void MyBackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
    {
         throw new Exception();
    }
    

    在没有Dubuggingin Visual Studio 的模拟器/设备上测试这个,你会看到你的应用关闭了。

    【讨论】:

      【解决方案4】:

      我也试过了。但它不工作。我将断点放在代码中,当我单击返回按钮时,还发现它没有进入或没有调用该函数。 – user1703145 45 分钟前

      您没有忘记在 XAML 中绑定此事件吗?

      <phone:PhoneApplicationPage ..... BackKeyPress="phoneApplicationPage_BackKeyPress">
      

      【讨论】:

      • 您是手动添加的还是通过事件属性自动添加的?如果您手动完成,也许可以尝试自动完成?
      • 我尝试了这两种方法。我在单击的同一页面中提供了 ovverride 方法。这与导航或事件有什么关系。我像这样导航到下一页 Page3 obj= new Page3(data.message_id); this.Content = obj;
      • 是的,我从 [link] stackoverflow.com/questions/17397163/… [link] 得到了解决方案......它与(5.2.4.3)上下文路径相关的问题......谢谢..
      猜你喜欢
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多