Обработка кликов из элементов PaneFooter в NavigationView UWP

Timothy Oliver спросил: 13 июня 2018 в 07:05 в: c#

В настоящее время я работаю над UWP-приложением, и у меня есть этот <NavigationView>, который обрабатывает клики <NavigationViewItem> <NavigationView.MenuItems>. Кажется, что он не распознает клики <NavigationViewItem> в <NavigationView.PaneFooter>.

Это код XAML

<NavigationView x:Name="ControlNavigationView" Margin="0,0,0,0" IsSettingsVisible="False" Header="Welcome" SelectionChanged="NavigationView_SelectionChanged">
            <NavigationView.MenuItems>
                <NavigationViewItem Icon="OtherUser" Content="Positions" Tag="Positions"/>
                <NavigationViewItem Icon="People" Content="Workers" Tag="Workers"/>
                <NavigationViewItem Icon="Phone" Content="Customers" Tag="Customers"/>
                <NavigationViewItem Icon="Manage" Content="Materials" Tag="Materials"/>
                <NavigationViewItem Content="Flies" Tag="Flies">
                    <NavigationViewItem.Icon>
                        <FontIcon Glyph="&#xE24A;"/>
                    </NavigationViewItem.Icon>
                </NavigationViewItem>
                <NavigationViewItem Icon="Shop" Content="Orders" Tag="Orders"/>
                <NavigationViewItem Icon="Library" Content="Job Cards" Tag="Job Cards"/>
            </NavigationView.MenuItems>
            <NavigationView.PaneFooter>
                <NavigationViewItem Icon="Contact" Content="User" Tag="User"/>
            </NavigationView.PaneFooter>
            <Frame x:Name="ContentFrame">
                <Frame.ContentTransitions>
                    <TransitionCollection>
                        <NavigationThemeTransition/>
                    </TransitionCollection>
                </Frame.ContentTransitions>
            </Frame>
        </NavigationView>

Код C #

private void NavigationView_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args)
    {
        switch (((NavigationViewItem)args.SelectedItem).Tag.ToString())
        {
            case "Positions":
                ContentFrame.Navigate(typeof(UnderConstructionPage), ((NavigationViewItem)args.SelectedItem).Tag.ToString());
                ControlNavigationView.Header = ((NavigationViewItem)args.SelectedItem).Tag.ToString();
                break;
            case "Workers":
                ContentFrame.Navigate(typeof(UnderConstructionPage), ((NavigationViewItem)args.SelectedItem).Tag.ToString());
                ControlNavigationView.Header = ((NavigationViewItem)args.SelectedItem).Tag.ToString();
                break;
            case "Customers":
                ContentFrame.Navigate(typeof(UnderConstructionPage), ((NavigationViewItem)args.SelectedItem).Tag.ToString());
                ControlNavigationView.Header = ((NavigationViewItem)args.SelectedItem).Tag.ToString();
                break;
            case "Materials":
                ContentFrame.Navigate(typeof(UnderConstructionPage), ((NavigationViewItem)args.SelectedItem).Tag.ToString());
                ControlNavigationView.Header = ((NavigationViewItem)args.SelectedItem).Tag.ToString();
                break;
            case "Flies":
                ContentFrame.Navigate(typeof(UnderConstructionPage), ((NavigationViewItem)args.SelectedItem).Tag.ToString());
                ControlNavigationView.Header = ((NavigationViewItem)args.SelectedItem).Tag.ToString();
                break;
            case "Orders":
                ContentFrame.Navigate(typeof(UnderConstructionPage), ((NavigationViewItem)args.SelectedItem).Tag.ToString());
                ControlNavigationView.Header = ((NavigationViewItem)args.SelectedItem).Tag.ToString();
                break;
            case "Job Cards":
                ContentFrame.Navigate(typeof(UnderConstructionPage), ((NavigationViewItem)args.SelectedItem).Tag.ToString());
                ControlNavigationView.Header = ((NavigationViewItem)args.SelectedItem).Tag.ToString();
                break;
            case "User":
                ContentFrame.Navigate(typeof(UnderConstructionPage), ((NavigationViewItem)args.SelectedItem).Tag.ToString());
                ControlNavigationView.Header = ((NavigationViewItem)args.SelectedItem).Tag.ToString();
                break;
        }
    }

Как обрабатывать событие click на

<NavigationView.PaneFooter>
            <NavigationViewItem Icon="Contact" Content="User" Tag="User"/>
</NavigationView.PaneFooter>


1 ответ

Xavier Xie - MSFT ответил: 15 июня 2018 в 05:44

Это по дизайну. Событие SelectionChanged будет запущено только в том случае, если в меню будет выбран текущий элемент.

В вашем случае вы можете зарегистрировать событие Tap для этого элемента NavigationViewItem, например, следующее:

<NavigationView.PaneFooter>
        <NavigationViewItem Icon="Contact" Content="User" Tag="User" Tapped="NavigationViewItem_Tapped"/>
</NavigationView.PaneFooter>
private void NavigationViewItem_Tapped(object sender, TappedRoutedEventArgs e)
{
    NavigationViewItem navigationViewItem = sender as NavigationViewItem;
    ContentFrame.Navigate(typeof(UnderConstructionPage), navigationViewItem.Tag);
    ControlNavigationView.Header = navigationViewItem.Tag;
}

Дополнительное видео по вопросу: Обработка кликов из элементов PaneFooter в NavigationView UWP

New Features in XAML for UWP Enterprise Applications

UWP 019 | Working with Navigation

UWP 021 | Implementing a Simple Hamburger Navigation Menu