2

我正在用 C# 开发一个 windows phone 8 应用程序。

应用程序仅在首次使用时才需要从服务器加载一些资源。这些资源稍后将在本地缓存,因此以后不必每次都加载它们。

基本上,我想将用户重定向到“正在准备应用程序”屏幕,直到应用程序准备就绪,但仅在第一次启动时

目前,我每次都将用户发送到“准备中”页面,如果资源可用则重定向 - 但问题是我在活动之前没有NavigationService准备好,Loaded因此用户每次实际上都会看到“准备中”页面。这是我当前的代码:

Loaded += async (x, args) =>
    {
       await Task.WhenAll(new List<Task> {fetchFirstResource,fetchSecondResource});
       NavigationService.Navigate(new Uri("/Views/RealPage.xaml", UriKind.Relative));
    };

tl;博士;

如何在运行时更改应用程序起始页?或者 - 我如何在加载事件之前重定向到另一个屏幕?

阅读和详细的答案表示赞赏,这个问题的替代方法也表示赞赏

4

2 回答 2

2

您应该使用UriMapper,它将允许您根据条件将应用程序重定向到特定页面。这是怎么做的:

DefaultTask.NavigationPageWMAppManifest.xml 文件的属性设置为不存在的页面

<DefaultTask Name="_default" NavigationPage="Start.xaml" />

在 App.xaml.cs 中的 Application 构造函数的末尾,将 设置为RootFrame.UriMapper根据条件执行重定向的新 UriMapper:

// Store a bool in the IsolatedStorage.Settings that indicates if the download has already been made
// and use it to know if you need to redirect or not
bool downloadRequired = true; // We set it to true just for the test
var mapper = new UriMapper();
string page = "/MainPage.xaml";

if (downloadRequired)
    page = "/DownloadData.xaml";

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

this.RootFrame.UriMapper = mapper;
于 2013-09-05T08:00:22.247 回答
0

一种方法是使用您需要的数据检查现有的本地文件,例如:

using (var store = IsolatedStorageFile.GetUserStoreForApplication()) {
    if (store.FileExists("cache.dat")) {
        // Deserialize cache.dat and load real page.
    } else {
        // Load preparing page, begin building cache, serialize cache for next run.
    }
}

您可以在启动序列、代码内导航而不是 StartupURI 中执行此操作。

于 2013-09-05T07:39:37.770 回答