0

WP7アプリで問題が発生しています。

アプリが保存されているユーザー名またはパスワードの値を検出できない場合にのみ、ログインページのプロンプトを表示しようとしています。ただし、ログインページに移動しようとすると、NullReferenceExceptionが発生し続けます。

私のコードは次のようになり、コンストラクターにあります。

if (!checkLogin())
    {
        NavigationService.Navigate(new Uri("/LoginPage.xaml", UriKind.Relative));
    }

またcheckLogin、分離されたストレージ設定が正しく設定されているかどうかに応じて、trueまたはfalseのいずれかを返す関数です。

誰か提案がありますか?

ありがとう。

4

1 に答える 1

3

これが私があなたがやりたいと思うことです(Peter Torrのブログから)。

さらに明確にする必要がある場合は、それを説明するためのコードをここに示します。2ページのA.XAMLとB.xamlがあり、IsolatedStorageに保存されているログイン資格情報のチェックに基づいてA.xamlとB.xamlのどちらをロードするかを検出したいとします。

プロジェクトのApp.xaml.csで次のように上書きpublic App()します。

    public App()
    {
        // Global handler for uncaught exceptions. 
        UnhandledException += Application_UnhandledException;

        // Standard Silverlight initialization
        InitializeComponent();

        // Phone-specific initialization
        InitializePhoneApplication();

        // Show graphics profiling information while debugging.
        if (System.Diagnostics.Debugger.IsAttached)
        {
            // Display the current frame rate counters.
            Application.Current.Host.Settings.EnableFrameRateCounter = true;

            // Show the areas of the app that are being redrawn in each frame.
            //Application.Current.Host.Settings.EnableRedrawRegions = true;

            // Enable non-production analysis visualization mode, 
            // which shows areas of a page that are handed off to GPU with a colored overlay.
            //Application.Current.Host.Settings.EnableCacheVisualization = true;

            // Disable the application idle detection by setting the UserIdleDetectionMode property of the
            // application's PhoneApplicationService object to Disabled.
            // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run
            // and consume battery power when the user is not using the phone.
            PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
        }

        RootFrame.Navigating += new NavigatingCancelEventHandler(RootFrame_Navigating);
    }

    void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e)
    {
        if (e.Uri.ToString().Contains("/MainPage.xaml") != true)
        {
            return;
        }
        e.Cancel = true;
        RootFrame.Dispatcher.BeginInvoke(delegate
        {
            if (System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.Contains("Login_Credentials"))
            {
                RootFrame.Navigate(new Uri("/B.xaml", UriKind.Relative));
            }
            else
            {
                RootFrame.Navigate(new Uri("/A.xaml", UriKind.Relative));
            }
        });
    }

次に、2つのダミーページA.xamlを作成して、ログイン資格情報(この場合はブールフラグ)を保存するためのロジックをB.xaml作成します。A.xaml

A.XAML:

<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <!--TitlePanel contains the name of the application and page title-->
    <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
        <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
        <TextBlock x:Name="PageTitle" Text="A Page" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
    </StackPanel>

    <!--ContentPanel - place additional content here-->
    <StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <Button Content="Save Login Creds" Click="SaveLoginCreds"/>
    </StackPanel>
</Grid>

A.XAML.cs:

private void SaveLoginCreds(object sender, RoutedEventArgs e)
{
    System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.Add("Login_Credentials", true);
}

これで、アプリケーションを初めて実行すると、ログイン資格情報が見つからなかったため、A.xamlが読み込まれます。次に、ボタンをクリックすると、ログイン資格情報データがIsolatedStorageに保存されます。次回、アプリを起動すると、ログインクレデンシャルが検出されたため、B.xamlが読み込まれます。

これがお役に立てば幸いです。

于 2012-09-14T16:10:55.900 に答える