首次屏幕

本文关键字:屏幕 | 更新日期: 2023-09-27 18:30:17

我正在用C#开发一个Windows Phone 8应用程序。

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

基本上,我想将用户重定向到"准备应用程序"屏幕,直到应用程序准备就绪,但仅限于第一次

目前,我每次都会将用户发送到"准备"页面,并在资源可用时重定向 - 但问题是我在Loaded事件之前没有准备好NavigationService,因此用户实际上每次都看到"准备"页面。这是我当前的代码:

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

博士;

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

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

首次屏幕

您应该UriMapper,它将允许您根据条件将应用程序重定向到特定页面。以下是操作方法:

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

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

在 App.xaml.cs 中的应用程序构造函数末尾,将RootFrame.UriMapper设置为新的 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;

一种方法是检查包含所需数据的现有本地文件,例如:

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 中执行此操作。