我和this guys question的情况非常相似,因为我有一个登录页面,这是我的MainPage.xaml文件,但我有另一个名为SetPassword.xaml的页面,如果用户没有设置,我想加载密码呢。基本上这是应用程序在安装后第一次加载。
我在SO上花了好几个小时尝试各种不同的解决方案(包括我链接的解决方案),但我没有到达任何地方,似乎很多解决方案都是针对WP7或WP8而且没有任何解决方案类似的已经解决了新的WP8.1。
这是使用Windows.Storage进行的基本检查,我正在查看是否已设置密码。
Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
if (localSettings.Values["myPassword"] == null)
{
Debug.WriteLine("Password not set");
this.Frame.Navigate(typeof(SetPassword));
}
else
{
Debug.WriteLine("Password is set, continuing as normal");
}
如果我将此添加到public MainPage()
课程,我在应用程序返回时没有问题"密码未设置"但是在调试消息中,this.frame.Navigate(typeof(SetPassword))
导航从不加载SetPassword视图。
我也在OnNavigatedTo
中尝试了这种方法,结果完全相同。
在我的App.xaml文件中,我也尝试了许多不同的方法,但结果相同。我可以得到调试消息但不是我正在寻找的导航。我考虑在Application_Launching
over here上实施一种方法,并在RootFrame.Navigating+= RootFrameOnNavigating;
over here上实施条件导航,但显然我遗漏了一些东西。
希望您更聪明的人可以帮助我根据条件值让我的导航工作?
答案 0 :(得分:5)
解决方案很简单。要做导航,我可以根据我的问题在App或MainPage中完成导航,但导航无法正常工作的原因是因为我试图导航到SetPassword.xaml而不是<ContentDialog>
而不是一个<Page>
。
实际上我感到很尴尬,我甚至没有检查过,但希望如果其他人发生这种情况,他们可以检查他们是否真的试图导航到一个Page而不是任何其他类型的元素。我多么可悲愚蠢!
修改强>
这是我在App.xaml文件中的OnLaunched看起来像我现在可以在哪里检查并根据设置的值重定向到不同的页面。
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame == null)
{
rootFrame = new Frame();
rootFrame.CacheSize = 1;
Window.Current.Content = rootFrame;
// The following checks to see if the value of the password is set and if it is not it redirects to the save password page - else it loads the main page.
Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
if (localSettings.Values["myPassword"] == null)
{
rootFrame.Navigate(typeof(SetPassword));
}
else
{
rootFrame.Navigate(typeof(MainPage));
}
}
if (rootFrame.Content == null)
{
if (rootFrame.ContentTransitions != null)
{
this.transitions = new TransitionCollection();
foreach (var c in rootFrame.ContentTransitions)
{
this.transitions.Add(c);
}
}
rootFrame.ContentTransitions = null;
rootFrame.Navigated += this.RootFrame_FirstNavigated;
if (!rootFrame.Navigate(typeof(MainPage), e.Arguments))
{
throw new Exception("Failed to create initial page");
}
}
Window.Current.Activate();
}