如何从弹出窗口访问应用程序栏

本文关键字:访问 应用程序 窗口 | 更新日期: 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

通常在模式窗口/弹出窗口中,有一个ClosedClosing事件,您可以挂接到该事件,此时您可以轻松访问应用栏。