如何在WP7应用程序中更改启动页面

6

我希望根据存储在独立存储中的设置,拥有不同的起始页面。

但我不知道如何处理最佳实践。例如,如果我在独立存储中找到一些内容,我希望用户获得主页;否则,我希望用户获得设置页面。

如果有神奇的方法可以使用,我正在使用MVVM-light。

敬礼


https://dev59.com/s2865IYBdhLWcg3wSMgw - driis
1个回答

9
您可以通过将虚拟页面设置为项目的主页面来实现此目标。您可以通过编辑项目的WMAppManifest.xml文件来更改主页:
<DefaultTask Name="_default" NavigationPage="DummyPage.xaml" />

现在,检测所有导航到虚拟页面的操作,并将其重定向到您想要的任何页面。
为此,在App.xaml.cs文件中,在构造函数的末尾订阅'Navigating'事件。
this.RootFrame.Navigating += this.RootFrame_Navigating;

在事件处理程序中,检测是否导航到虚拟页面,如果是,则取消导航并重定向到想要的页面。请见以下代码示例:
void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e)
{
    if (e.Uri.OriginalString == "/DummyPage.xaml")
    {
        e.Cancel = true;

        var navigationService = (NavigationService)sender;

        // Insert here your logic to load the destination page from the isolated storage
        string destinationPage = "/Page2.xaml";

        this.RootFrame.Dispatcher.BeginInvoke(() => navigationService.Navigate(new Uri(destinationPage, UriKind.Relative)));
    }
}

编辑

实际上,有一种更简单的方法。在应用程序构造函数的末尾,只需设置一个UriMapper和您想要替换的Uri:

var mapper = new UriMapper();

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

this.RootFrame.UriMapper = mapper;

你好,通过独立存储在应用程序文件中执行操作是否是一个好的实践? - mr carl
只要您不执行耗时操作,就应该没问题。在应用程序文件中访问隔离存储没有问题,但您应该知道此代码在应用程序的第一页显示之前执行。因此,您只有5秒钟来完成计算,否则您的应用将无法通过认证。 - Kevin Gosse
太好了,感谢您提供关于5秒规则的信息 :) 您的第二个解决方案非常有效。 - mr carl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接