我正在尝试用密码保护我的应用。我选择了一个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);
答案 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
究竟是什么?
通常在模态窗口/弹出窗口中有一个Closed
或Closing
事件,您可以将其挂钩,此时您可以轻松访问应用栏。