uwp - 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
消失了。
你能澄清一下吗?
解决方案
原因是您使用错误的Frame
. 在您的情况下,UI 树看起来像这样:
- 窗户
- 框架
- 导航视图页面
- 主机
- 页
- 主机
- 导航视图页面
- 框架
当您浏览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
最后一个说明 - 你不必为发布问题而道歉,这就是这个网站的用途;-)。
推荐阅读
- javascript - 玉/哈巴狗的进口声明
- scala - Scala:期待 Try[Stream[(String)]] 但正在给 Try[String]
- html - React 的渲染输出无意导致引导程序的内联表单出现问题
- ios - 如何检测用户何时在 CarPlay 中切换选项卡?
- node.js - 打字稿看不到nodejs全局变量
- google-app-maker - 请求的建议 UI 流程 -> 延迟 -> 响应?
- mapping - 大型数据集和路线分析
- mysql - Knex 创建数据库并向其中插入数据
- bash - 如何在 bash 中转义 3 级(su 命令,psql,然后查询)
- java - 在 SOAP(轴 2)中使用证书注册协议“https”多线程请求