首页 > 解决方案 > UWP 导航视图消失

问题描述

我有带有 3 个按钮的 NavigationView

<NavigationView x:Name="nvTopLevelNav"
            Margin="0,0,0,0"
            ItemInvoked="nvTopLevelNav_ItemInvoked"
            IsTabStop="False"
            AlwaysShowHeader="False"
            VerticalContentAlignment="Stretch" 
            HorizontalContentAlignment="Stretch" 
            VerticalAlignment="Stretch" 
            Grid.RowSpan="1" 
            Grid.Row="1" 
            Grid.Column="1" 
            Grid.ColumnSpan="1"
            Padding="0,0,0,0" >
        <NavigationView.MenuItems>
            <NavigationViewItem Tag="Nav_BlankPage1" VerticalContentAlignment="Center">
                <TextBlock Tag="Nav_BlankPage1" Text="Nav_BlankPage1" />
            </NavigationViewItem>
            <NavigationViewItem Tag="Nav_BlankPage2" VerticalContentAlignment="Center">
                <TextBlock Tag="Nav_BlankPage2"   Text="Nav_BlankPage2"/>
            </NavigationViewItem>
            <NavigationViewItem Tag="Nav_BlankPage3" VerticalContentAlignment="Center">
                <TextBlock Tag="Nav_BlankPage3"   Text="Nav_BlankPage3" />
            </NavigationViewItem>
        </NavigationView.MenuItems>
        <Frame x:Name="MainFrame" 
           Grid.Column="1" 
           Grid.Row="1"
           VerticalContentAlignment="Stretch" VerticalAlignment="Stretch" Padding="0,0,0,0">
            <RelativePanel Grid.Column="0"
                   Grid.Row="1">
             </RelativePanel>
        </Frame>
    </NavigationView>

MainPage 后面的代码:

private void nvTopLevelNav_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)
{
    if (args.IsSettingsInvoked)
    {
    }
    else
    {
        TextBlock ItemContent = args.InvokedItem as TextBlock;
        if (ItemContent != null)
        {
            switch (ItemContent.Tag)
            {
                case "Nav_BlankPage1":
                    MainFrame.Navigate(typeof(BlankPage1));

                    break;
                case "Nav_BlankPage2":
                    MainFrame.Navigate(typeof(BlankPage2));

                    break;
                case "Nav_BlankPage3":
                    MainFrame.Navigate(typeof(BlankPage3));

                    break;
                case "Nav_Settings":

                    break;
            }
        }
    }
}

每个页面都有 3 个按钮(第一个是后面的代码):

private void btnBlankPage1_Click(object sender, RoutedEventArgs e)
{
    var _frame = (Frame)Window.Current.Content;
    _frame.Navigate(typeof(BlankPage1));
}

如果我使用NavigationView按钮一切都很好,但如果我使用页面上的按钮就NavigationView消失了。

你能澄清一下吗?

标签: uwp

解决方案


原因是您使用错误的Frame. 在您的情况下,UI 树看起来像这样:

  • 窗户
    • 框架
      • 导航视图页面
        • 主机

当您浏览NavigationView菜单时,一切正常,因为您使用的是内部MainFrame. 但是,在另一个页面上,您可以在( )Frame的根目录中导航并在其中导航。这将导航离开包含 的页面并导航到其位置,因此消失。Window(Frame)Window.Current.ContentNavigationViewBlankPage1NavigationView

相反,您必须使用MainFrame. NavigationView最简单的方法是向Frame包含 的页面添加一个属性,NavigationView然后将其用于导航:

public static Frame AppFrame { get; private set; }

在页面构造函数中分配它:

AppFrame = MainFrame;

现在您使用它来导航:

NavigationViewPage.AppFrame.Navigate(typeof(BlankPage1));

包含NavigationViewPage_NavigationView

最后一个说明 - 你不必为发布问题而道歉,这就是这个网站的用途;-)。


推荐阅读