以编程方式选择 NavigationView 溢出列表中的项目

Selecting item in NavigationView overflow list programatically

当我尝试以编程方式 select NavigationView 的 "overflow list" 中的项目时,出现以下错误:

The parameter is incorrect.

container'

下图就是一个例子,我在其中尝试以编程方式 select 菜单项 3:


var nextItem = dataSource.indexOf(menuItem3); NavView.SelectedItem = nextItem;


当 selecting 一个没有溢出的项目时它工作正常。

The parameter is incorrect. container'

为了解释这种行为,我们需要检查 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 中关注不确定的项目是不合理的。如果您想要 select 项目正确,请确保足够的 window 宽度可以使所有项目显示在 NavigationView.