繁体   English   中英

如何在 UWP 中通过 GoBack() 跟踪所选项目

[英]How to keep track of selected item by GoBack() in UWP

我写了一个代码,我可以在其中转到不同的页面,并可以使用 GoBack() 方法返回。

我的问题是,当我转到某个页面时,导航菜单中所选项目的名称旁边会显示一个蓝色条。 但是当我回去时,所选项目不会改变。 我怎样才能做到这一点?

我希望我能够解释。 如果不是,请考虑查看我添加的图像。

谢谢。

这是我的代码。

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)

使用后退按钮和期望不满足

您可以跟踪当前页面(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的内容和所选菜单之间没有链接/关系。 您可以通过编程方式设置所选菜单,也可以根据点击/点击进行更改。

Dictionary<string, Type> _pages =
        new()
        {
            { "Requests", typeof(Pages.Requests.Requests) },
            { "Shift", typeof(Pages.Shift.Shift) }
        };

    public void NavigationViewItemInvoked(NavigationView navigationView, NavigationViewItemInvokedEventArgs args)
    {
        NavigationViewItem item = (NavigationViewItem)args.InvokedItemContainer;

        if(
            _pages.TryGetValue(item.Name, out Type t) &&
            t != _contentFrame.CurrentSourcePageType)
            switch (args.IsSettingsInvoked)
            {
                case true:
                    _contentFrame.Navigate(typeof(Pages.Settings.Settings));
                    break;

                case false:
                    _contentFrame.Navigate(t);
                    break;
            }
    }

对于它的价值,您还可以为设置添加一个字典条目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM