6

我的情况与这个人的问题非常相似,因为我有一个登录页面,它是我的 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()类中,我在调试消息中返回“未设置密码”的应用程序中没有问题,但是this.frame.Navigate(typeof(SetPassword))导航永远不会加载 SetPassword 视图。

我也尝试过这种方法,OnNavigatedTo结果完全相同。

在我的 App.xaml 文件中,我还尝试了许多不同的方法,结果相同。我可以得到调试消息,但不能得到我正在寻找的导航。我查看了在此处实现一个方法以及Application_Launching 此处实现条件导航,但显然我遗漏了一些东西。RootFrame.Navigating+= RootFrameOnNavigating;

希望你们更聪明的人可以帮助我让我的导航基于条件值工作?

4

1 回答 1

5

解决方案很简单。要进行导航,我可以根据我的问题在 App 或 MainPage 中完成它,但导航不起作用的原因是因为我试图导航到 SetPassword.xaml ,它是 a<ContentDialog>而不是<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();
}
于 2014-04-21T20:55:39.393 回答