2014-06-06 222 views
3

我在windows phone 8.1運行時應用程序中有一個彈出窗口。Windows Phone 8.1中BackButtonPressed問題?

當在頁面中按下後退按鈕並彈出時,應用程序應該保留在頁面本身中,否則應該返回。這是我的概念。所以,我編寫象下面這樣:

void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) 
    { 
     if (PopupWindow.IsOpen) 
     { 
      PopupWindow.IsOpen = false; 
      e.Handled = true; 
     } 
    } 

即使彈出窗口是在頁面打開,應用程序進入到前一頁。我在windows phone silverlight應用程序中使用了相同的邏輯,並且工作。

NOTE:我正在使用基本頁面。

我在做什麼錯誤?

+0

它看起來很完美。什麼不工作?你的應用正在關閉?你需要邏輯中的「else」嗎? –

回答

2

檢查兩件事情:

  • 在默認情況下NavigationHelperHardwareButtons_BackPressed缺乏檢查,如果該事件已經handeled,試圖改善它:

    private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) 
    { 
        // if (this.GoBackCommand.CanExecute(null)) // this is as a default 
        if (this.GoBackCommand.CanExecute(null) && !e.Handled) // add a check-up 
        // ... rest of the code 
    
  • 看看你的App.xaml中。 cs文件,並在App()HardwareButtons_BackPressed訂閱(檢查訂閱方法是否也導航回):

    public App() 
    { 
        this.InitializeComponent(); 
        this.Suspending += OnSuspending; 
        // HardwareButtons.BackPressed += HardwareButtons_BackPressed; // this line also could fire Frame.GoBack() (as default project template) 
        // of course check what is in the above method 
    } 
    

還記得事件是按照您訂閱它們的順序觸發的,例如Navigation Helper訂閱Loaded事件。如果您在此之後訂閱,則首先導航。您可以在之前訂閱或使用國旗。

0

我解決THI方式

protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed; 
    } 

    protected virtual void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) 
    { 
     e.Handled = true; 
    }