如何从弹出窗口访问应用程序栏
本文关键字:访问 应用程序 窗口 | 更新日期: 2023-09-27 17:55:55
我正在尝试使用密码保护我的应用程序。我选择了一个弹出窗口,用户可以在其中输入密码。
我的应用程序包含应用程序栏,因此我需要在显示密码输入对话框时隐藏它。我做如下:
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(); }
}
应用程序栏按原样消失。当用户输入有效密码时,应用应显示应用程序栏。但是当我尝试从弹出窗口访问应用程序栏时,我得到了NullReferenceException
这是可以理解的,因为弹出窗口不包含应用程序栏。我不知道如何在弹出窗口打开时访问主页的应用程序栏。
请问,有什么提示吗?
更新:
谢谢你们的回答。我没有提到PasswordInputPrompt
是Coding4Fun工具包的一部分,这是我的犯规。我确信PasswordInputPrompt
继承自System.Windows.Controls.Primitives.PopUp
.如你所知,它没有。Dennis Delimarsky的回答是正确的,因为使用标准PopUp被考虑在内。
幸运的是,来自Coding4Fun项目的程序员预测了Parent的需求。就我而言,答案如下:passwordInput.Parent.Dispatcher.BeginInvoke(PasscodeApplicationBarVisibility);
可以通过设置 Closed
事件处理程序来访问ApplicationBar
:
Popup popup = new Popup();
// Add children to the Popup instance
popup.IsOpen = true;
popup.Closed += (s, ev) =>
{
((ApplicationBar)ApplicationBar).IsVisible = true;
};
到底是什么PasswordInputPrompt
?
通常在模式窗口/弹出窗口中,有一个Closed
或Closing
事件,您可以挂接到该事件,此时您可以轻松访问应用栏。