以编程方式选择 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
.
当我尝试以编程方式 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
.