CustomMessageBox
Silverlight Toolkit for Windows Phoneのコントロールを使用しています。チュートリアルで提案されているように、匿名のコールバック (MS では「デリゲート」と言いますか?) を渡すときに、コード ビハインド ファイルで定義されているページの部分クラスのメンバーを参照します。これはビルドおよびデプロイされますが、実行時にロジックに到達するとクラッシュします。
VS デバッガーから、コールバック内のスコープには、分離コード ファイルのメンバーではなく、ページ部分クラスの XAML 側のメンバーのみが含まれていることがわかりました。これは、私が参照しているメンバーがスコープ内にないことを意味します (Intellisense は問題ありませんが)。さらにNavigationService.Navigate
、コールバック内では使用できません。
コールバックから含まれているクラス内のコードを呼び出すにはどうすればよいですか?
ここにコードがあります、
// This is a member of the partial class which inherits from
// PhoneApplicationPage
private void cancelBtn_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
if ((this.nameTextBox.Text != String.Empty) || (bool)this.protectCheckBox.IsChecked)
{
CustomMessageBox messageBox = new CustomMessageBox()
{
Caption = "Confirm leave page",
Message = "You have entered some profile data which will be lost if you leave this page. Are you sure you want to leave this page?",
LeftButtonContent = "no",
RightButtonContent = "yes"
};
messageBox.Dismissed += (s1, e1) =>
{
if (e1.Result == CustomMessageBoxResult.RightButton)
{
// Both of these raise an exception ...
GoToProfilePage();
//NavigationService.Navigate(new Uri("/View/MainPage.xaml", UriKind.Relative));
// Inspecting the debugger here shows only half the expected
// number of methods in the 'this' object - specifically only
// those defined in XAML
}
};
messageBox.Show();
}
else
{
// This works fine
GoToProfilePage();
}
}
GoToProfilePage()
コード ビハインド ファイル内のメソッドはどこにありますか。
これは例外で、
System.NullReferenceException was unhandled
Message=NullReferenceException
StackTrace:
at Microsoft.Phone.Controls.CustomMessageBox.ClosePopup(Boolean restoreOriginalValues)
at Microsoft.Phone.Controls.CustomMessageBox.c__DisplayClass4.b__1(Object s, EventArgs e)
at Microsoft.Phone.Controls.Transition.OnCompleted(Object sender, EventArgs e)
at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)
アップデート
コードが実行されたように見えますが、null 参照例外が発生するのはデリゲートが終了したときだけなので、スコープの問題ではない可能性があります...