NavigationView - добавление пунктов меню с C # приводит к тому, что NavigationViewItem вкладывается в сгенерированный NavigationViewItem - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь добавить пункты меню в элемент управления 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, поэтому дерево XAML и отображаемое меню выглядят так (слишком много отступов на левая сторона из-за этого):

enter image description here

Пример кода в документации Microsoft использует тот же синтаксис, который я использую.

Если я использую строку, элемент меню отображается правильно, но тогда я не могу легко установить какие-либо свойства элемента меню. Я знаю, что могу перебирать элементы, чтобы настроить каждый из них, но похоже, что он должен отображаться правильно.

Я что-то не так делаю или это ошибка в элементе управления?

1 Ответ

0 голосов
/ 17 сентября 2018

Когда вы добавляете новые элементы из кода, он использует стиль NavigationViewItem по умолчанию для ваших новых элементов и должен иметь тот же стиль, что и первый NavigationViewItem, который вы использовали в xaml.

Если вы хотите изменить стиль NavigationViewItem, вы можете добавить собственный ресурс в стиле NavigationViewItem на свою страницу, чтобы иметь желаемый вид.

--- Обновление ---

Хорошо, вы использовали Microsoft.UI.Xaml.Controls.NavigationView , так что если вы хотите использовать тот же стиль стиля NavigationViewItem в NavigationView , вам также необходимо добавить 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);
    }
}
...