2015-08-05 11 views
13

In meiner Xaml-Seite habe ich einen Frame.Zurück Zurück Navigation Windows 10 (UWP)

Ich versuche, ein BackButton-Ereignis zu haben, nur innerhalb des Rahmens zu navigieren.

so habe ich versucht, dieses Stück Code es HardwareButtons_BackPressed Ereignis Im Telefon verwenden schließen Sie die Anwendung nach dem Handeln

public MainPage(){ 
    this.InitializeComponent(); 
    if(Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons")) { 
     Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed; 
    } 
} 
private void HardwareButtons_BackPressed(object sender,BackPressedEventArgs e) { 
    if(insideFrame.CanGoBack())insideFrame.GoBack(); 
    else Application.Current.Exit(); 
} 

aber.

Es scheint einige Standard-Zurück-Taste Verhalten auf Mainpage zu laufen ...

Wie kann ich es beheben? Und fügen sie in Windows10 neue Ereignisse hinzu, um die Rückwärtsnavigation zu handhaben?


[Update]

Nun fand ich heraus, es ist besser SystemNavigationManager in Windows 10 verwenden statt Input.HardwareButtons.BackPressed.

SystemNavigationManager currentView = SystemNavigationManager.GetForCurrentView(); 
+0

Verwendung von 'SystemNavigationManager' kann im folgenden Blog gefunden werden: http://www.wintellect.com/devcenter/jprosise/handling-the-back-button-in-windows-10-uwp-apps – NP3

+0

@ Shahriar Funktioniert das auch für Windows 10 Mobile? Da ich überprüft habe, wird die Zurück-Schaltfläche in Windows Mobile nicht angezeigt. –

Antwort

7

Sie müssen dem System mitteilen, dass Sie die Zurück-Taste gedrückt haben, indem Sie die Handled-Eigenschaft von BackPressedEventArgs auf true setzen.

private void OnHardwareButtonsBackPressed(object sender, BackPressedEventArgs e) 
    { 
     // This is the missing line! 
     e.Handled = true; 

     // Close the App if you are on the startpage 
     if (mMainFrame.CurrentSourcePageType == typeof(Startpage)) 
      App.Current.Exit(); 

     // Navigate back 
     if (mMainFrame.CanGoBack) 
     { 
      mMainFrame.GoBack(); 
     } 
    } 
-1

Ich denke, das liegt daran, dass Sie HardwareButtons_BackPressed auf Ihrer Seite statt auf in app.xaml.cs. hinzufügen

In App.xaml.cs:

public App() 
{ 
    this.InitializeComponent(); 
    this.Suspending += this.OnSuspending; 

    HardwareButtons.BackPressed += HardwareButtons_BackPressed; 
} 

void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) 
{ 
    Frame rootFrame = Window.Current.Content as Frame; 

    if (rootFrame != null && rootFrame.CanGoBack) 
    { 
     e.Handled = true; 
     rootFrame.GoBack(); 
    } 
} 

Nun, zurück Taste des Telefons wird auf allen Seiten arbeiten.

Und dann, wenn Sie wollen in jeder Seite eine bestimmte Schaltfläche hinzufügen tun zurück:

In der bestimmten Seite (oder jeder Seiten, wenn Sie möchten):

public void btn_return_Tapped(object sender, TappedRoutedEventArgs e) 
     { 
      Frame rootFrame = Window.Current.Content as Frame; 

      if (rootFrame != null && rootFrame.CanGoBack) 
      { 
       e.Handled = true; 
       rootFrame.GoBack(); 
      } 
     } 

Quelle: http://windowsapptutorials.com/tips/general-tips/handling-the-back-button-in-a-windows-phone-8-1-app/

+0

InsideFrame ist nicht in App.xaml.cs Bereich – Shahriar

+0

Danke für die Tipps cosmo0. Bearbeitete meine Antwort, um das zu beheben. – Clad07

0

folgendermaßen vor:

  • Fügen Sie wie folgt zwei globale Variablen auf Ihrer Seite hinzu.

    private NavigationHelper navigationHelper; 
    private RelayCommand _GoBackCommand; 
    
  • Dann fügen Sie unten Code im Konstruktor der bestimmten Seite hinzu.

    // below code is to override the back navigation 
        // hardware back button press event from navigationHelper 
        _GoBackCommand = new RelayCommand 
         (
          () => this.CheckGoBack(), 
          () => this.CanCheckGoBack() 
         ); 
    
        navigationHelper.GoBackCommand = _GoBackCommand; 
        // --------- 
    
  • Dann fügen Sie diese beiden Methoden, die wir haben gerade in Konstruktor deklariert.

    private bool CanCheckGoBack() 
    { 
        // this should be always true to make sure the app handles back buton manually. 
        return true; 
    } 
    
    private void CheckGoBack() 
    { 
        // this will be execute when back button will be pressed 
    } 
    

ps. - Dazu müssen Sie möglicherweise BasicPage anstelle von BlankPage verwenden, während Sie eine neue Seite hinzufügen.

hoffe das wird helfen ..!

+0

Wo ist 'NavigationHelper'? Wie Sie in Windows10 wissen, gibt es keine Vorlage wie Windows Phone 8.1 zu haben "NavigationHelper" drin ... Wenn Sie wissen ... wo kann ich 'NavigationHelper' bekommen? – Shahriar

+0

In Windows 10 gibt es keine 'BasicPage' ... es ist nur' BlackPage' – Shahriar

+0

Sie können die Datei von einem beliebigen vorhandenen WP8.1-Projekt oder von einer anderen Projektvorlage erhalten. –

0

Versuchen this.It für Frame zurück Navigation funktioniert.

protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 

     HardwareButtons.BackPressed += HardwareButtons_BackPressed; 

    } 


    void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) 
    { 

    Frame rootFrame = Window.Current.Content as Frame; 

     if (Frame.CanGoBack) 
     { 
      e.Handled = true; 
      Frame.GoBack(); 
     } 
    } 

} 
18

Windows-10 (UWP) umfassen SystemNavigationManager in Windows.UI.Core Namespace für Navigation Zweck.

Da SystemNavigationManager Teil von Windows Universal Platform ist, wird es von allen Gerätefamilien unter Windows 10 einschließlich Mobile und PC unterstützt.

Für Einzelne Seite


Wenn Sie nur Navigation für einzelne Seite zu handhaben wollen. Befolgen Sie die folgenden Schritte

Schritt 1. Verwenden Sie Namespace Windows.UI.Core

using Windows.UI.Core; 

Schritt 2. Registrieren Anforderungsereignis für aktuelle Ansicht zurück. Der beste Platz dafür ist der Hauptkonstruktor der Klasse nach InitializeComponent().

public MainPage() 
{ 
    this.InitializeComponent(); 
    //register back request event for current view 
    SystemNavigationManager.GetForCurrentView().BackRequested += MainPage_BackRequested; 
} 

Schritt 3. Griff BackRequested Ereignis

private void Food_BackRequested(object sender, BackRequestedEventArgs e) 
{ 
    if (Frame.CanGoBack) 
    { 
     Frame.GoBack(); 
     e.Handled = true; 
    } 
} 

Für die komplette Anwendung an einem Ort für einzelne rootFrame


Der beste Ort für alle Backbutton für alle Ansichten Handhabung ist App.xaml.cs

Schritt 1. Verwenden Sie Namespace Windows.UI.Core

using Windows.UI.Core; 

Schritt 2. Registrieren Anforderungsereignis für aktuelle Ansicht zurück. Der beste Ort dafür ist OnLaunched kurz vor Window.Current.Activate

protected override void OnLaunched(LaunchActivatedEventArgs e) 
{ 
    ... 
    SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested; 
    Window.Current.Activate(); 
} 

Schritt 3. Griff BackRequested Ereignis

private void OnBackRequested(object sender, BackRequestedEventArgs e) 
{ 
    Frame rootFrame = Window.Current.Content as Frame; 
    if (rootFrame.CanGoBack) 
    { 
     rootFrame.GoBack(); 
     e.Handled = true; 
    } 
} 

Referencen- Handle back button pressed in UWP

Hoffe, das ist hilfreich für jemand!