不能在框架内的xaml之间进行导航
本文关键字:之间 导航 xaml 框架 不能 | 更新日期: 2023-09-27 18:05:58
我有问题。为什么它没有导航到其他xaml?哪里出了问题?所以,我试图使它可以在一个框架中的两个或多个xaml之间导航。
链接:https://github.com/Englbach/MutiViewInRootPage
<SplitView.Content>
<!-- OnNavigatingToPage we synchronize the selected item in the nav menu with the current page.
OnNavigatedToPage we move keyboard focus to the first item on the page after it's loaded. -->
<Frame x:Name="AppShellFrame">
<Frame.ContentTransitions>
<TransitionCollection>
<NavigationThemeTransition>
<NavigationThemeTransition.DefaultNavigationTransitionInfo>
<EntranceNavigationTransitionInfo />
</NavigationThemeTransition.DefaultNavigationTransitionInfo>
</NavigationThemeTransition>
</TransitionCollection>
</Frame.ContentTransitions>
</Frame>
</SplitView.Content>
public static AppShell Current = null;
public List<NavMenuItem> NavList { get; } = new List<NavMenuItem>(new[]
{
new NavMenuItem()
{
Symbol = Symbol.Add,
Label = "Add feed",
DestPage = typeof(RootPages),
Arguments = typeof(AddFeedView)
},
new NavMenuItem()
{
Symbol = Symbol.Edit,
Label = "Edit feeds",
DestPage = typeof(RootPages),
Arguments = typeof(EditFeedView)
}
});
public AppShell()
{
this.InitializeComponent();
Current = this;
}
private void NavMenuList_ItemInvoked(object sender, ListViewItem e)
{
NavMenuList.SelectedIndex = -1;
var item = (NavMenuItem)((NavMenuListView)sender).ItemFromContainer(e);
if(item!=null)
{
AppFrame.Navigate(typeof(RootPages), item.Arguments);
}
}
您可能遵循官方导航菜单(XAML)示例来设计您的布局。
你的演示中有两个小问题。
- 每次单击
NavMenuList
中的项时,应触发AppShell.xaml.cs中的NavMenuList_ItemInvoked
事件。在这种情况下,你一次又一次地导航到你的RootPages
,然后一起把导航参数(item.Arguments)传递给AppFrame.Navigate(typeof(RootPages), item.Arguments);
这样的RootPages
,这个参数实际上就是你的目的地。
你可以这样修改这里的代码:
private void NavMenuList_ItemInvoked(object sender, ListViewItem e)
{
//NavMenuList.SelectedIndex = -1;
var item = (NavMenuItem)((NavMenuListView)sender).ItemFromContainer(e);
if (item != null)
{
//AppFrame.Navigate(typeof(RootPages), item.Arguments);
if (item.DestPage != null &&
item.DestPage != this.AppFrame.CurrentSourcePageType)
{
this.AppFrame.Navigate(item.DestPage, item.Arguments);
}
}
}
- 然后这里是第二个问题,正如我所说的,
Arguments
应该是导航参数,例如,我导航到AddFeedView
页面,我想发送一个消息"balalala",那么我们可以这样编码:AppFrame.Navigate(typeof(AddFeedView), "balalala");
。这意味着,您混淆了DestPage
和Arguments
。你可以这样修改NavList
:
public List<NavMenuItem> NavList { get; } = new List<NavMenuItem>(new[]
{
new NavMenuItem()
{
Symbol = Symbol.Add,
Label = "Add feed",
DestPage = typeof(AddFeedView),
Arguments = typeof(RootPages)
},
new NavMenuItem()
{
Symbol = Symbol.Edit,
Label = "Edit feeds",
DestPage = typeof(EditFeedView),
Arguments = typeof(RootPages)
}
});
另外,如果您希望AppFrame
在默认情况下首先导航到RootPages
,您可以这样编写代码:
public AppShell()
{
this.InitializeComponent();
Current = this;
AppFrame.Navigate(typeof(RootPages));
}