NavigationView - 使用 C# 添加菜单项会导致 NavigationViewItem 嵌套在生成的 NavigationViewItem 中

NavigationView - adding menu items with C# results in NavigationViewItem being nested in a generated NavigationViewItem

我正在尝试通过我的代码将菜单项添加到 NavigationView 控件。

XAML:

<ct:NavigationView x:Name="NavMain" ItemInvoked="NavMain_ItemInvoked">
    <ct:NavigationView.MenuItems>
        <ct:NavigationViewItem Content="Home"/>
    </ct:NavigationView.MenuItems>
</ct:NavigationView>

C#:

private void RenderMenu()
{
    NavMain.MenuItems.Add(new NavigationViewItemSeparator());

    foreach (TarotSuit suit in deck.Suits)
    {
        // make a nav menu item for the suit
        NavigationViewItem newMenu = new NavigationViewItem();
        newMenu.Content = suit.Suit;
        newMenu.Icon = new SymbolIcon(Symbol.OutlineStar);

        NavMain.MenuItems.Add("menu");
    }
}

菜单呈现,但看起来添加的 NavigationViewItem 被设置为自动生成的 NavigationViewItem 的 content,因此 XAML 树和呈现菜单如下所示(因此左侧的填充过多):

Microsoft 文档中的示例代码使用的语法与我使用的相同。

如果我使用字符串,菜单项会正确呈现,但我无法轻松设置菜单项的任何属性。我知道我可以遍历这些项目来配置每个项目,但它似乎应该正确呈现。

我是不是做错了什么或者这是控件中的错误?

当您从后面的代码中添加新项目时,它会为您的新项目使用默认的 NavigationViewItem 样式,并且它应该与您在 [=] 中使用的第一个 NavigationViewItem 具有相同的样式33=]。

如果您想更改 NavigationViewItem 样式,可以在您的页面中添加自定义 NavigationViewItem 样式资源,这样您就可以获得您想要的外观。

---更新---

好的,你在后面的代码中使用了Microsoft.UI.Xaml.Controls.NavigationView, so if you want use the same style of NavigationViewItem style in the NavigationView, you should also need to add the Microsoft.UI.Xaml.Controls.NavigationViewItem

在后面的代码中,添加命名空间:

using MUXC = Microsoft.UI.Xaml.Controls;

那么你应该创建新的 Microsoft.UI.Xaml.Controls.NavigationViewItem object then add them to your NavigationView:

private void RenderMenu()
{
    NavMain.MenuItems.Add(new NavigationViewItemSeparator());

    foreach (TarotSuit suit in deck.Suits)
    {
        // make a nav menu item for the suit
        MUXC.NavigationViewItem newMenu = new MUXC.NavigationViewItem();
        newMenu.Content = suit.Suit;
        newMenu.Icon = new SymbolIcon(Symbol.OutlineStar);

        NavMain.MenuItems.Add(newMenu);
    }
}