[英]UWP Graphic glitch when selecting a MenuItem of a NavigationView generated in code behind
我在后面的代码中有一个NavigationView和一些NavigationViewItems。 从代码中,我试图选择一个NavigationViewItem,它是启动时向用户显示的默认值,并且我遇到了奇怪的行为(如果选择在xaml中生成的NavigationViewItem,则不会发生此行为)。
当我启动应用程序时,看不到选择(NavigationViewItem左侧的带强调色的矩形),但是当我单击另一个NavigationViewItem时,该矩形就会出现并启动动画,将其从旧的NavigationViewItem移到新的。
我遵循在文档中找到的相同代码,除了他们在文档中选择了在xaml中生成的NavigationViewItem。 https://docs.microsoft.com/zh-cn/windows/uwp/design/controls-and-patterns/navigationview
这是重现该问题的代码(项目的最低版本和目标版本:Win10 FCU Build 16299)
XAML:
<NavigationView x:Name="navView" Loaded="navView_Loaded">
</NavigationView>
<Button Content="Select Mail" Click="button_Click" HorizontalAlignment="Center"/>
C#:
private void navView_Loaded(object sender, RoutedEventArgs e)
{
navView.MenuItems.Add(new NavigationViewItem()
{ Content = "Home", Icon = new SymbolIcon(Symbol.Home), Tag = "home" });
navView.MenuItems.Add(new NavigationViewItem()
{ Content = "My content", Icon = new SymbolIcon(Symbol.Folder), Tag = "content" });
navView.MenuItems.Add(new NavigationViewItem()
{ Content = "Mail", Icon = new SymbolIcon(Symbol.Mail), Tag = "mail" });
foreach (NavigationViewItemBase item in navView.MenuItems)
{
if (item is NavigationViewItem && item.Tag.ToString() == "home")
{
navView.SelectedItem = item;
break;
}
}
}
private void button_Click(object sender, RoutedEventArgs e)
{
navView.SelectedItem = navView.MenuItems.ElementAt(2);
}
问题是您在navView_Loaded
做了更多事情,导致SelectionIndicator
动画终止。 您可以添加一个await Task.Delay(500);
在设置NavigationView
selectedItem进行验证之前。
await Task.Delay(500);
foreach (NavigationViewItemBase item in navView.MenuItems)
{
if (item is NavigationViewItem && item.Tag.ToString() == "home")
{
navView.SelectedItem = item;
(navView.SelectedItem as NavigationViewItem).IsSelected = true;
break;
}
}
对于您的方案,您可以在Loading
事件处理程序方法中添加MenuItems
,并在Loaded事件处理程序方法中设置选择项。
private void navView_Loaded(object sender, RoutedEventArgs e)
{
foreach (NavigationViewItemBase item in navView.MenuItems)
{
if (item is NavigationViewItem && item.Tag.ToString() == "home")
{
navView.SelectedItem = item;
(navView.SelectedItem as NavigationViewItem).IsSelected = true;
break;
}
}
}
private void navView_Loading(FrameworkElement sender, object args)
{
navView.MenuItems.Add(new NavigationViewItem()
{ Content = "Home", Icon = new SymbolIcon(Symbol.Home), Tag = "home" });
navView.MenuItems.Add(new NavigationViewItem()
{ Content = "My content", Icon = new SymbolIcon(Symbol.Folder), Tag = "content" });
navView.MenuItems.Add(new NavigationViewItem()
{ Content = "Mail", Icon = new SymbolIcon(Symbol.Mail), Tag = "mail" });
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.