在Windows中,ItemInvoked和SelectionChanged事件对于NavigationView有什么区别?API参考态
ItemInvoked 当菜单中的项接收到诸如单击或点击之类的交互时发生。 SelectionChanged 在当前选定项更改时发生。
在我看来,SelectionChanged甚至可以通过单击NavigationView.MenuItem以外的其他方法来检测导航发生的时间,那么使用更好、更包容的选项会更好吗?
还是每个用例都不同?
发布于 2018-03-15 23:39:27
主要区别是SelectionChanged事件只执行一次,但是如果您重复单击所选项,则不会触发该事件。另一方面,ItemInvoked将在每次单击某项时执行,即使它已经被选中。
同样-当您在代码中手动设置SelectionChanged时,SelectedItem事件将执行。
发布于 2018-03-20 17:25:20
另一件可能有用的事情是,当您单击一个ItemInvoked项时,NavigationView会在SelectionChanged之前触发。
发布于 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标记属性之后,解决方案工作得很好。我已经包含了用于验证解决方案的测试代码。
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>https://stackoverflow.com/questions/49306731
复制相似问题