Я пытаюсь защитить свое приложение паролем. Я выбрал всплывающее окно, в котором пользователь может ввести свой пароль.
Мое приложение содержит ApplicatioBar, поэтому мне нужно скрыть его, когда отображается диалоговое окно ввода пароля.
Я делаю следующее:
public MainPage()
{
...
PasscodeApplicationBarVisibility(); //Now AppBar disapears
PasscodeEvent();
}
private void PasscodeApplicationBarVisibility()
{
((ApplicationBar)ApplicationBar).IsVisible = !(settings.PasscodeRequired);
}
private void PasscodeEvent()
{
passwordInput = new PasswordInputPrompt {
Title = "Please Enter Passcode!",
InputScope = new InputScope { Names = { new InputScopeName() { NameValue = InputScopeNameValue.TelephoneNumber } } }, };
passwordInput.Completed += new EventHandler<PopUpEventArgs<string, PopUpResult>>(passwordInput_Completed);
passwordInput.Show();
}
void passwordInput_Completed(object sender, PopUpEventArgs<string, PopUpResult> e)
{
if (settings.Passcode.Equals(e.Result)) {
settings.PasscodeRequired = false;
//Here is the problem - NullReferenceException
PasscodeApplicationBarVisibility();
((PasswordInputPrompt)sender).Completed -= passwordInput_Completed; }
else {
((PasswordInputPrompt)sender).Completed -= passwordInput_Completed;
IncorrectPasscode = true;
PasscodeEvent(); }
}
ApplicationBar исчезает, как и должно быть.
Когда пользователь вводит действительный пароль, приложение должно показать ApplicationBar. Но когда я пытаюсь добраться до ApplicationBar из окна PopUp, я получаю NullReferenceException
, что понятно, потому что окна PopUp не содержат ApplicationBar. Я не знаю, как добраться до панели приложений MainPage, когда открыто всплывающее окно.
Пожалуйста, есть намеки?
UPDATE:
Спасибо, ребята, за ответы. Я не упомянул, что PasswordInputPrompt
является частью набора инструментов Coding4Fun. Я был уверен, что PasswordInputPrompt
наследуется от System.Windows.Controls.Primitives.PopUp
. Как вы знаете, это не так.
Ответ Дениса Делимарского верный, поскольку учитывается использование стандартного PopUp.
К счастью, программисты из проекта Coding4Fun предсказали необходимость перехода в Parent. В моем случае ответ будет следующим: passwordInput.Parent.Dispatcher.BeginInvoke(PasscodeApplicationBarVisibility);