Windows 10 mobile - przycisk wstecz z "hamburger menu" źle działa

0

Witam,

W swojej aplikacji Windows 10 UWP zmieniłem pierwotne menu, które było po prostu pierwszą stroną aplikacji na menu wysuwane z lewej strony dostępne dla wszystkich stron ("hamburger menu).

Problem w tym, że przy zmianie, przestała mi działać dobrze obsługa przycisku wstecz na telefonie, która była obsłużona według tego przykładu:
http://stackoverflow.com/questions/40061172/windows-10-uwp-back-button-to-previous-frame-with-hamburger-menu

Teraz mam pierwszą stronę (root), która ładuje do SplitView.Content stronę główną (Main). Jak przechodzę z menu do przykładowej innej strony "Products" i potem cofam, powinno mnie cofnąć do strony "Main". Jednak wtedy aplikacja się zamyka. Domyślam się gdzie leży problem. Aplikacja nie widzi, że jest na stronie "Products" tylko cały czas "Root" i z tego powodu przycisk wstecz powoduje zamknięcie aplikacji.

W załączniku przesyłam cały przykładowy projekt

1

Musisz zaimplementować obsługę przycisku cofania w app.xaml.cs

sealed partial class App : Application
{

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

    protected override void OnLaunched(LaunchActivatedEventArgs e)
    {
        /.../


            SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;

            SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
                rootFrame.CanGoBack  ?
                AppViewBackButtonVisibility.Visible :
                AppViewBackButtonVisibility.Collapsed;
        }

        /.../
    }

   /.../

    private void OnBackRequested(object sender, BackRequestedEventArgs e)
    {
        Frame rootFrame = Window.Current.Content as Frame;

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

Rozwiązaniem było usunięcie obsługi przycisku wstecz w app.xaml.cs oraz dodanie go do root.xaml.cs


public root()
{
    SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
}

private void MyFrame_Navigated(object sender, NavigationEventArgs e)
{
    SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
            MyFrame.CanGoBack ?
            AppViewBackButtonVisibility.Visible :
            AppViewBackButtonVisibility.Collapsed;
}

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

oraz w pliku xml dodanie:

<Frame Name="MyFrame" Navigated="MyFrame_Navigated"/>

1 użytkowników online, w tym zalogowanych: 0, gości: 1