これが私があなたがやりたいと思うことです(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が読み込まれます。
これがお役に立てば幸いです。