Как добраться до ApplicationBar из окна PopUp? - PullRequest
3 голосов
/ 07 мая 2011

Я пытаюсь защитить свое приложение паролем. Я выбрал всплывающее окно, в котором пользователь может ввести свой пароль.

Мое приложение содержит 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);

Ответы [ 2 ]

3 голосов
/ 08 мая 2011

Вы можете получить доступ к ApplicationBar, установив обработчик события Closed:

Popup popup = new Popup();
// Add children to the Popup instance
popup.IsOpen = true;
popup.Closed += (s, ev) => 
{  
  ((ApplicationBar)ApplicationBar).IsVisible = true;
};
1 голос
/ 08 мая 2011

что такое PasswordInputPrompt?

Обычно в модальных окнах / всплывающих окнах происходит событие Closed или Closing, к которому можно подключиться, и в этот момент вы можете легко получить доступ к панели приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...