Je writed propre solution, mais peut-être ce n'est pas si élégant qu'il pourrait l'être.
App logique de verrouillage: activer l'application de verrouillage par mot de passe utilisateur, nous Application_Deactivated la manipulation et les événements Application_Closing dans l'application classe et marquage App comme verrouillé si l'utilisateur activé cette option. Ensuite, sur chaque page, nous devrions mettre check: l'application est actuellement verrouillée et si c'est le cas, nous devrions naviguer vers AppLockedWithPasswordPage. Sur AppLockedWithPasswordPage nous devons vérifier le mot de passe de l'utilisateur, s'il est correct, appelez NavigationService.GoBack().
Nous avons donc besoin de faire 6 étapes:
Vous devez choisir où enregistrer IsAppCurrentlyLocked (drapeau bool), AppLockPassword (string) et IsUserEnabledAppLockWithPassword (drapeau bool).Je l'avais choisi IsolatedStorageSettings
page Créer AppLockedWithPassword, où vous devez montrer TextBox et Button, ne pas oublier de fournir l'option pour l'utilisateur de réinitialiser AppLock bien sûr, avec la suppression de données d'applications
AppLockedWithPasswordPage devrait empêcher la navigation BackButton, afin empêchant:
// AppLockedWithPasswordPage
protected override void OnBackKeyPress(CancelEventArgs e)
{
// Preventing back key navigation
e.Cancel = true;
}
Vérifiez le mot de passe sur le bouton cliquez
// AppLockedWithPasswordPage
private void UnlockAppButton_Click(object sender, RoutedEventArgs e)
{
if (PasswordBox.Password.Equals(IsolatedStorageSettings["AppLockPassword"]))
{
NavigationService.GoBack();
}
else
{
// Say user, that password incorrect, etc...
}
}
Dans les méthodes de classe App trouvent Application_Deactivated (pour gérer l'application réduisant au minimum (bouton windows)) et Application_Closing (à gérer quand app de fermeture de l'utilisateur), nous devrions marquer l'application comme bloquée si l'utilisateur activé cette option lorsque ces événements se produit
private void SetIsAppCurrentlyLockedFlagIfUserEnabledAppLocking()
{
if ((bool)IsolatedStorageSettings["IsUserEnabledAppLockWithPassword"])
{
IsolatedStorageSettings["IsAppCurrentlyLocked"] = true;
}
}
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
SetIsAppCurrentlyLockedFlagIfUserEnabledAppLocking();
}
private void Application_Closing(object sender, ClosingEventArgs e)
{
SetIsAppCurrentlyLockedFlagIfUserEnabledAppLocking();
}
et dernière étape, sur toutes les pages que vous voulez vous verrouiller devez ajouter vérifier la méthode OnNavigatedTo qui naviguera à AppLockedWithPasswordPage si l'application est actuellement verrouillé
// Create some class, like PagesUtils or so on with check method
private static Uri uriToAppLockedWithPasswordPage = new Uri("pathToAppLockedWithPasswordPage", UriKind.Relative);
public static void NavigateToAppLockedWithPasswordPageIfAppLocked(PhoneApplicationPage page)
{
if ((bool)IsolatedStorageSettings["IsAppCurrentlyLocked"])
{
page.NavigationService.Navigate(uriToAppLockedWithPasswordPage);
}
}
// In each page you want to lock add
protected override void OnNavigatedTo(NavigationEventArgs e)
{
PagesUtils.NavigateToAppLockedWithPasswordPageIfAppLocked();
base.OnNavigatedTo();
}
P.S. bien sûr votre code est beaucoup mieux, ce n'est par exemple simple, je l'espère vous aidera
J'utiliserais une classe de base pour vos pages pour appeler 'PagesUtils.NavigateToAppLockedWithPasswordPageIfAppLocked()' de sorte que vous n'ayez pas à l'ajouter sur chaque page. –