我正在用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));
};
如何在运行时更改应用程序启动页面?或者 - 如何在加载事件之前将其重定向到另一个屏幕?
阅读和详细解答表示赞赏,此问题的替代方法也表示赞赏
答案 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中执行此操作。