英文:
in c++ winrt NavigationView how do I select an item after control is populated dynamically
问题
我正在使用 WinUi 2.8,并且我有一个导航视图,它是使用 MenuItemsSource 属性动态填充的:
<muxc:NavigationView x:Name="mainNav" MenuItemsSource="{x:Bind FirstLvelItems, Mode=OneWay}"
MenuItemTemplate="{StaticResource NavigationViewMenuItem}" >
一个项目也有动态填充的子项目:
<DataTemplate x:Key="NavigationViewMenuItem" x:DataType="local:MyType">
<muxc:NavigationViewItem x:Name="NavItem" Content="{x:Bind DisplayName}" MenuItemsSource="{x:Bind SecondLevelItems}" Tag="{x:Bind Name}"/>
</DataTemplate>
在控件加载后,我想选择我确定在第二层的项目。我使用 NavigationView.Loaded() 事件,在那里我可以找到我想要的项目的父级(第一级)(使用 ContainerFromMenuItem() ),但我找不到来自第二级的项目。我尝试过使用 ContainerFromMenuItem()、MenuItems()、VisualTreeHelper,但都不起作用。
我正在在一个 Win32 应用程序的岛上使用 Winrt,所以我不能提供一个示例项目。
英文:
I am using WinUi 2.8 and I have a navigation view that is populated dynamically using MenuItemsSource Property:
<muxc:NavigationView x:Name="mainNav" MenuItemsSource="{x:Bind FirstLvelItems, Mode=OneWay}"
MenuItemTemplate="{StaticResource NavigationViewMenuItem}" >
An item has children also populated dynamically:
<DataTemplate x:Key="NavigationViewMenuItem" x:DataType="local:MyType">
<muxc:NavigationViewItem x:Name="NavItem" Content="{x:Bind DisplayName}" MenuItemsSource="{x:Bind SecondLevelItems}" Tag="{x:Bind Name}"/>
</DataTemplate>
After control is loaded I want to select an item that I know for sure that is on the second level. I use NavigationView.Loaded() event and there I can find the parent (the first level) of my wanted item (using ContainerFromMenuItem() ) but I can not find the item from the second level. I tried using ContainerFromMenuItem(), MenuItems(), VisualTreeHelper but nothing works.
I am using Winrt in an island from a Win32 app so I can not give a sample project.
答案1
得分: 1
在WinUI中,默认情况下,NavigationViewItem不会自动展开,因此当加载NavigationView控件时,其MenuItems不会被加载。
你可以在XAML中将NavigationViewItem的IsExpanded属性设置为true。这样,当触发NavigationView Loaded事件时,第二级的NavigationViewItems将被加载。
<DataTemplate x:Key="NavigationViewMenuItem" x:DataType="local:MyType">
<muxc:NavigationViewItem IsExpanded="True" x:Name="NavItem" Content="{x:Bind DisplayName}" MenuItemsSource="{x:Bind SecondLevelItems}" Tag="{x:Bind Name}"/>
</DataTemplate>
附注:在NavigationView Loaded事件处理程序中,你需要折叠那些你不希望展开的NavigationViewItems。
英文:
In WinUI, NavigationViewItem is not expanded by default, so it's MenuItems won't be loaded when the NavigationView control is loaded.
You can set the NavigationViewItem IsExpanded to true in xaml. This way, the NavigationViewItems on the second level will be loaded when NavigationView Loaded event is triggered.
<DataTemplate x:Key="NavigationViewMenuItem" x:DataType="local:MyType">
<muxc:NavigationViewItem IsExpanded="True" x:Name="NavItem" Content="{x:Bind DisplayName}" MenuItemsSource="{x:Bind SecondLevelItems}" Tag="{x:Bind Name}"/>
</DataTemplate>
PS: On NavigationView Loaded event handler you need to collapse the NavigationViewItems you don't want to be expanded.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论