首次屏幕
本文关键字:屏幕 | 更新日期: 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 中执行此操作。