5

我有一个应用程序,当第一次初始化 RootFrame 时,我让它检查它是否是第一次启动该应用程序。如果是,它会将 RootFrame UriMapper 更改为教程页面。问题是,我似乎无法找到将用户重定向回 MainPage.xaml 的方法。到目前为止它不会做任何事情。

这是我在 App 构造函数中用于更改初始启动页面的代码:

if (App.Model.SelectFirstStart())
{
    var mapper = new UriMapper();

    mapper.UriMappings.Add(new UriMapping
    {
       Uri = new Uri("/MainPage.xaml", UriKind.Relative),
       MappedUri = new Uri("/TutorialPage.xaml", UriKind.Relative)
       });

       RootFrame.UriMapper = mapper;
    }

当用户点击教程页面中的按钮时,它应该将它们重定向到 MainPage.xaml。这是我迄今为止尝试过的:

NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));

和:

App.RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));

任何帮助将非常感激。谢谢

4

1 回答 1

6

我看到了几个问题。

首先,您没有更改教程页面中的映射,因此基本上MainPage.xaml仍然映射到TutorialPage.xaml.

第二个问题是即使在修复之后,导航MainPage.xaml仍然无法正常工作,因为尽管实际页面存在TutorialPage.xaml,但无论如何RootFrame.CurrentSource仍会指向。MainPage.xaml

要解决此问题,您需要在教程页面的按钮单击中执行以下操作

// Inside the Button click event of TutorialPage.xaml
// Change the mapping so that MainPage points to itself
((UriMapper)App.RootFrame.UriMapper).UriMappings[0].MappedUri = 
    new Uri("/MainPage.xaml", UriKind.Relative);

// Since RootFrame.CurrentSource is still set to MainPage, you need to pass
// some dummy query string to force the navigation
App.RootFrame.Navigate(new Uri("/MainPage.xaml?dummy=1", UriKind.Relative));

// Remove back entry so that if user taps the back button 
// you won't get back to tutorial
App.RootFrame.RemoveBackEntry();
于 2013-06-16T20:24:14.760 回答