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

时间:2018-09-15 21:51:44

标签: c# uwp-xaml

我试图通过后面的代码将菜单项添加到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树和呈现的菜单看起来像这样(填充过多因此,在左侧):

enter image description here

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

如果我使用字符串,则菜单项将正确呈现,但随后将无法轻松设置菜单项的任何属性。我知道我可以遍历所有项目以配置每个项目,但似乎应该正确渲染。

我是在做错什么还是控件中的错误?

1 个答案:

答案 0 :(得分:1)

当您从后面的代码中添加新项目时,它将为新项目使用默认的NavigationViewItem样式,并且应与您在xaml中使用的第一个NavigationViewItem样式相同。

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

--- 更新 ---

好的,您使用了Microsoft.UI.Xaml.Controls.NavigationView,所以如果您想在NavigationView中使用相同的NavigationViewItem样式,则还需要在其中添加Microsoft.UI.Xaml.Controls.NavigationViewItem您的代码在后面。

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

using MUXC = Microsoft.UI.Xaml.Controls;

然后,您应该创建一个新的Microsoft.UI.Xaml.Controls.NavigationViewItem对象,然后将它们添加到您的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);
    }
}