第一次屏幕

时间:2013-09-05 07:30:08

标签: c# wpf windows-phone-8 windows-phone splash-screen

我正在用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;博士;

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

阅读和详细解答表示赞赏,此问题的替代方法也表示赞赏

2 个答案:

答案 0 :(得分:2)

您应该UriMapper,它允许您根据条件将应用重定向到特定页面。以下是该怎么做:

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

<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;

答案 1 :(得分: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中执行此操作。