Как отслеживать выбранный элемент с помощью GoBack () в UWP - PullRequest
0 голосов
/ 15 марта 2019

Я написал код, в котором я могу перейти на разные страницы и вернуться обратно, используя метод GoBack ().

Моя проблема в том, что при переходе на страницу появляется синяя полоса рядом с названием выбранного элемента в меню навигации. Но когда я возвращаюсь, выбранный пункт не меняется. Как я могу это сделать?

Я надеюсь, что смог объяснить. Если нет, рассмотрите добавленные мной изображения.

Спасибо.

Вот мой код.

1012 * XAML *

<NavigationView x:Name="navSample"
                IsPaneOpen="False"
                SelectionChanged="NavSample_SelectionChanged"
                SelectionFollowsFocus="Enabled" 
                IsBackButtonVisible="Auto"
                BackRequested="NavSample_BackRequested">
    <NavigationView.MenuItems>
        <NavigationViewItem Icon="Play" Content="Item1" x:Name="SamplePage1Item" />
        <NavigationViewItem Icon="Save" Content="Item2" x:Name="SamplePage2Item" />
        <NavigationViewItem Icon="Refresh" Content="Item3" x:Name="SamplePage3Item" />
    </NavigationView.MenuItems>
    <Frame x:Name="contentFrame"/>
</NavigationView>

C #

private void NavSample_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args)
{
    if (navSample.SelectedItem == SamplePage1Item)
    {
        contentFrame.Navigate(typeof(SamplePage1));
    }
    else if (navSample.SelectedItem == SamplePage2Item)
    {
        contentFrame.Navigate(typeof(SamplePage2));
    }
    else if (navSample.SelectedItem == SamplePage3Item)
    {
        contentFrame.Navigate(typeof(SamplePage3));
    }
    else if (navSample.SelectedItem == navSample.SettingsItem)
    {
        contentFrame.Navigate(typeof(SamplePage2));
    }

    if (contentFrame.CanGoBack)
    {
        navSample.IsBackEnabled = true;
    }
}
private void NavSample_BackRequested(NavigationView sender, NavigationViewBackRequestedEventArgs args)
{
    if (contentFrame.CanGoBack)
    {
        contentFrame.GoBack();

    }
}

Возможно, эти изображения помогут вам лучше понять.

Использование меню навигации для просмотра страницы

Использование меню навигации для просмотра страницы (2)

Использование кнопки «назад» и ожидание не оправдывается

1 Ответ

0 голосов
/ 17 марта 2019

Вы можете отслеживать текущую страницу (SamplePage1, SamplePage2..etc) и установить выбранный пункт меню вручную:

SamplePage1Item.IsSelected = true;

Вы можете написать свою логику так:

private void NavSample_BackRequested(NavigationView sender, NavigationViewBackRequestedEventArgs args)
{
    if (contentFrame.CanGoBack)
    {
        contentFrame.GoBack();

        // setting selected menu 
        if(contentFrame.Content is SamplePage1) SamplePage1Item.IsSelected = true;
        else if(contentFrame.Content is SamplePage2) SamplePage2Item.IsSelected = true;
    }
}

Поскольку между контентом contentFrame и выбранным меню нет связи / связи. Вы либо установите выбранное меню программно, либо оно изменится в ответ на нажатие / клик.

...