首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ItemInvoked对SelectionChanged

ItemInvoked对SelectionChanged
EN

Stack Overflow用户
提问于 2018-03-15 18:25:58
回答 3查看 1.4K关注 0票数 2

在Windows中,ItemInvokedSelectionChanged事件对于NavigationView有什么区别?API参考

ItemInvoked 当菜单中的项接收到诸如单击或点击之类的交互时发生。 SelectionChanged 在当前选定项更改时发生。

在我看来,SelectionChanged甚至可以通过单击NavigationView.MenuItem以外的其他方法来检测导航发生的时间,那么使用更好、更包容的选项会更好吗?

还是每个用例都不同?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-15 23:39:27

主要区别是SelectionChanged事件只执行一次,但是如果您重复单击所选项,则不会触发该事件。另一方面,ItemInvoked将在每次单击某项时执行,即使它已经被选中。

同样-当您在代码中手动设置SelectionChanged时,SelectedItem事件将执行。

票数 3
EN

Stack Overflow用户

发布于 2018-03-20 17:25:20

另一件可能有用的事情是,当您单击一个ItemInvoked项时,NavigationView会在SelectionChanged之前触发。

票数 3
EN

Stack Overflow用户

发布于 2019-01-10 18:49:30

最近,我一直在努力解决这个问题,并且在使用SelectionChanged事件时遇到了问题。连续单击同一菜单项不会产生任何结果。然后我找到了这篇博客文章(https://blogs.msdn.microsoft.com/appconsult/2018/05/06/using-the-navigationview-in-your-uwp-applications/),它建议使用ItemInvoked事件,原因与答案1中给出的原因相同。这对我来说不像在博客中发布的那样有效,但是在更改代码以使用InvokedItemContainer标记属性之后,解决方案工作得很好。我已经包含了用于验证解决方案的测试代码。

代码语言:javascript
复制
private void NvTopLevelNav_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)
    {
        if (args.IsSettingsInvoked)
        {
            contentFrame.Navigate(typeof(SettingsPage));
        }
        else
        {
            string navTo = args.InvokedItemContainer.Tag.ToString();

            if ( navTo != null)
            {
                switch (navTo)
                {
                    case "Nav_Home":
                        contentFrame.Navigate(typeof(HomePage));
                        break;

                    case "Nav_Shop":
                        contentFrame.Navigate(typeof(ShopPage));
                        break;

                    case "Nav_ShopCart":
                        contentFrame.Navigate(typeof(CartPage));
                        break;

                    case "Nav_Message":
                        contentFrame.Navigate(typeof(MessagePage));
                        break;

                    case "Nav_Print":
                        contentFrame.Navigate(typeof(PrintPage));
                        break;
                }
            }
        }
    }

<Grid>
    <NavigationView x:Name="nvTopLevelNav"
                    Loaded="NvTopLevelNav_Loaded"
                    Margin="0,12,0,0"
                    SelectionChanged="NvTopLevelNav_SelectionChanged"
                    ItemInvoked="NvTopLevelNav_ItemInvoked"
                    IsTabStop="False"
                    Header="Lets Go Shopping">
        <NavigationView.MenuItems>
            <NavigationViewItem Icon="Home" Content="Home" Tag="Nav_Home" />
            <NavigationViewItem Icon="Shop" Content="Shop" Tag="Nav_Shop" />
            <NavigationViewItem Content="Shopping Cart" Tag="Nav_Cart">
                <NavigationViewItem.Icon>
                    <FontIcon Glyph="[Insert Hex Decimal Value Here. See Segoe MDL2 below for details.]"/>
                </NavigationViewItem.Icon>
            </NavigationViewItem>
            <NavigationViewItem Icon="Message" Content="Message" Tag="Nav_Message" />
            <NavigationViewItem Icon="Print" Content="Print" Tag="Nav_Print" />
        </NavigationView.MenuItems>
        <Frame x:Name="contentFrame"></Frame>
    </NavigationView>

</Grid>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49306731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档