当我尝试以编程方式选择NavigationView
的“溢出列表”中的项目时,出现以下错误:
参数不正确。
容器”
下面的示例是一个示例,在该示例中,我尝试以编程方式选择菜单项3:
var nextItem = dataSource.indexOf(menuItem3);
NavView.SelectedItem = nextItem;
当选择没有溢出的项目时,它会很好地工作。
答案 0 :(得分:1)
参数不正确。容器”
为解释此行为,我们需要在 Generic.xaml 文件中检查NavigationView
样式。
<Button
x:Name="TopNavOverflowButton"
Grid.Column="4"
Content="More"
Style="{StaticResource NavigationViewOverflowButtonStyleWhenPaneOnTop}"
Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.OverflowButtonVisibility}">
<Button.Flyout>
<Flyout Placement="Bottom">
<Flyout.FlyoutPresenterStyle>
<Style TargetType="FlyoutPresenter">
<Setter Property="Padding" Value="0,8" />
<!-- Set negative top margin to make the flyout align exactly with the button -->
<Setter Property="Margin" Value="0,-4,0,0" />
</Style>
</Flyout.FlyoutPresenterStyle>
<NavigationViewList x:Name="TopNavMenuItemsOverflowHost" ItemTemplate="{TemplateBinding MenuItemTemplate}" ItemTemplateSelector="{TemplateBinding MenuItemTemplateSelector}" ItemContainerStyle="{TemplateBinding MenuItemContainerStyle}" ItemContainerStyleSelector="{TemplateBinding MenuItemContainerStyleSelector}" SingleSelectionFollowsFocus="False" IsItemClickEnabled="True">
<ListView.ItemContainerTransitions>
<TransitionCollection />
</ListView.ItemContainerTransitions>
</NavigationViewList>
</Flyout>
</Button.Flyout>
</Button>
如您所见,更多项存储在 TopNavMenuItemsOverflowHost NavigationViewList
中。它的容器是Flyout
。 Flyout是延迟负载控制。如果未弹出,则不会加载其内容。这就是为什么缺少容器的原因。
我认为在TopNavMenuItemsOverflowHost
中聚焦不确定的项目是不合理的。如果要正确选择项目,请确保有足够的窗口宽度以使所有项目都显示在NavigationView
中。