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

时间:2019-01-15 09:52:02

标签: c# uwp uwp-xaml

当我尝试以编程方式选择NavigationView的“溢出列表”中的项目时,出现以下错误:

  

参数不正确。

     

容器”

下面的示例是一个示例,在该示例中,我尝试以编程方式选择菜单项3:


NavigationView overflow

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


当选择没有溢出的项目时,它会很好地工作。

1 个答案:

答案 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中。