2011-05-07 50 views
3

我試圖用密碼保護我的應用程序。我選擇了一個PopUp窗口,用戶可以在其中輸入密碼。如何從PopUp窗口到達ApplicationBar?

我的應用程序包含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。但是當我嘗試從PopUp窗口到達ApplicationBar時,我得到NullReferenceException,這是可以理解的,因爲PopUp窗口不包含ApplicationBar。當PopUp窗口打開時,我不知道如何到達MainPage的ApplicationBar。

請提供任何提示?

UPDATE:

謝謝你的答案傢伙。我沒有提到PasswordInputPrompt是Coding4Fun工具包的一部分,這是我的錯誤。我確定PasswordInputPrompt繼承自System.Windows.Controls.Primitives.PopUp。正如你所知道的那樣。 丹尼斯Delimarsky的答案是正確的,因爲使用標準PopUp考慮。

幸運的是,來自Coding4Fun項目的編碼人員預測需要爲父項進行創建。在我的情況下,答案如下:passwordInput.Parent.Dispatcher.BeginInvoke(PasscodeApplicationBarVisibility);

回答

3

您可以通過設置Closed事件處理程序訪問ApplicationBar

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

感謝您的回答,我明白'PasswordInputPrompt'不會從'System.Windows.Controls.Primitives.PopUp'繼承。它沒有像「Closed」或「Closing」這樣的事件。就使用'System.Windows.Controls.Primitives.PopUp'而言,你的回答是絕對正確的。 – Maku 2011-05-08 12:34:03

1

究竟是什麼PasswordInputPrompt

通常在模態窗口/彈出窗口中有一個ClosedClosing事件,您可以在此處輕鬆訪問應用程序欄。

+1

'PasswordInputPrompt'是Coding4Fun工具包的一部分:http://coding4fun.codeplex.com/ – 2011-05-08 00:59:39

+0

@Dennis Delimarsky我的權利。這是Coding4Fun工具包的一部分。我沒有提到它,因爲我確信'PasswordInputPrompt'基於'System.Windows.Controls.Primitives.PopUp'。 – Maku 2011-05-08 12:33:05