UWP导航视图消失了

时间:2018-08-10 09:58:43

标签: 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上的按钮,则消失了。

你能澄清一下吗?

1 个答案:

答案 0 :(得分:3)

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

  • 窗口
    • 框架
      • NavigationViewPage
        • MainFrame
          • 页面

当您浏览NavigationView菜单时,就可以了,就像使用内部MainFrame一样。但是,在另一页上,将Frame放在Window(Frame)Window.Current.Content)的根目录中并进行导航。这样可以浏览出包含NavigationView的页面,并在BlankPage1所在的位置导航,因此NavigationView消失了。

相反,您必须使用MainFrame中的NavigationView进行导航。最简单的方法是将Frame属性添加到包含NavigationView的页面,然后将其用于导航:

public static Frame AppFrame { get; private set; }

然后在页面构造函数中为其分配:

AppFrame = MainFrame;

现在您可以使用它进行导航:

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

NavigationViewPage所在的页面包含NavigationView

最后一个便条-您不必为发布问题而道歉,这是该网站的目的;-)。