C# Windows Phone 8.1检查是否设置了密码或是否加载新页面

C# Windows Phone 8.1检查是否设置了密码或是否加载新页面,c#,windows-runtime,windows-phone,windows-phone-8.1,win-universal-app,C#,Windows Runtime,Windows Phone,Windows Phone 8.1,Win Universal App,我有一个非常类似的情况,我有一个登录页面,它是我的MainPage.xaml文件,但我有另一个页面,叫做SetPassword.xaml,如果用户还没有设置密码,我想加载它。本质上,这是应用程序安装后第一次加载 我已经花了几个小时尝试了各种不同的解决方案(包括我链接的那个),但我还是一事无成,似乎很多解决方案都是针对WP7或WP8的,而新的WP8.1没有解决任何类似的问题 这是使用Windows.Storage进行的基本检查,以查看是否设置了密码 Windows.Storage.Applicat

我有一个非常类似的情况,我有一个登录页面,它是我的MainPage.xaml文件,但我有另一个页面,叫做SetPassword.xaml,如果用户还没有设置密码,我想加载它。本质上,这是应用程序安装后第一次加载

我已经花了几个小时尝试了各种不同的解决方案(包括我链接的那个),但我还是一事无成,似乎很多解决方案都是针对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()
class,则在调试消息中返回“密码未设置”的应用程序中,我没有问题,但是
this.frame.Navigate(typeof(SetPassword))
导航从不加载SetPassword视图

我也在导航到的
中尝试过这种方法,结果完全相同

在我的App.xaml文件中,我也尝试了许多不同的方法,同样得到了相同的结果。我可以得到调试消息,但不能得到我正在寻找的导航。我研究了在
应用程序启动时实现一个方法,以及在
根框架上实现条件导航

希望你们这些聪明的人能帮助我在条件值的基础上实现导航?

解决方案很简单。根据我的问题,我可以在应用程序或主页上进行导航,但导航不起作用的原因是我试图导航到SetPassword.xaml,它是一个
而不是

我觉得很尴尬,我甚至没有检查,但希望如果这发生在其他人身上,他们可以检查他们实际上是在尝试导航到一个页面,而不是任何其他类型的元素。我真是太愚蠢了

编辑:

下面是我在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();
}

你的起始页的构造器不是一个可以调用导航的地方。检查这个,可能会有帮助。另外,关于
RootFrameOnNavigating
,您尝试了哪些不起作用的方法?显示一些代码,更好地描述您的问题。不要只是发布指向其他问题的链接。我感到非常尴尬,我找到了答案,现在就发布解决方案。仅供参考,代码中的这一行已经过时,因为它从未以任何方式实际使用过,可以删除:
Windows.Storage.StorageFolder localFolder=Windows.Storage.ApplicationData.Current.localFolder
与编辑上面的帖子相比,我认为添加一条评论会更好。这个解决方案正如预期的那样工作,但我想知道是否有更干净的MVVM方法来解决这个问题。可能是一个中间页面,viewmodel负责条件导航。