如何从PopUp窗口访问ApplicationBar?

时间:2011-05-07 19:30:06

标签: c# windows-phone-7

我正在尝试用密码保护我的应用。我选择了一个PopUp窗口,用户可以在其中输入密码。

我的应用程序包含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。但是当我尝试从PopUp窗口到达ApplicationBar时,我得到NullReferenceException这是可以理解的,因为PopUp窗口不包含ApplicationBar。当PopUp窗口打开时,我不知道如何到达MainPage的ApplicationBar。

请提供任何提示?

更新

谢谢你们的回答。我没有提到PasswordInputPrompt是Coding4Fun工具包的一部分,这是我的失败。我确信PasswordInputPrompt继承自System.Windows.Controls.Primitives.PopUp。如你所知,它没有。 Dennis Delimarsky的答案是对的,因为考虑使用标准的PopUp。

幸运的是,来自Coding4Fun项目的编码员预测需要为父母提供服务。就我而言,答案如下:passwordInput.Parent.Dispatcher.BeginInvoke(PasscodeApplicationBarVisibility);

2 个答案:

答案 0 :(得分:3)

您可以通过设置ApplicationBar事件处理程序

来访问Closed
Popup popup = new Popup();
// Add children to the Popup instance
popup.IsOpen = true;
popup.Closed += (s, ev) => 
{  
  ((ApplicationBar)ApplicationBar).IsVisible = true;
};

答案 1 :(得分:1)

PasswordInputPrompt究竟是什么?

通常在模态窗口/弹出窗口中有一个ClosedClosing事件,您可以将其挂钩,此时您可以轻松访问应用栏。