试图确定为什么我的应用程序(基于这个"空白应用程序"模板进入这个勇敢的新世界)并不像我期望的那样工作(http://stackoverflow.com / questions / 14467756 / why-would-my-event-handler-not-get-called),我启动了一个新的Blank项目,然后删除了MainPage并添加了一个新的Basic(非Blank)页面,我命名为MainPage以纪念离开的页面(以及对传统和懒惰的点头 - 所以我不必更改导航到该页面的app.xaml.cs中的代码。)
Blank应用程序创建了这样的原始MainPage.xaml.cs(自动生成的注释省略):
namespace AsYouWish
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
}
}
...我用BasicPage(而不是BlankPage)替换它,它生成了这个:
namespace AsYouWish
{
public sealed partial class MainPage : AsYouWish.Common.LayoutAwarePage
{
public MainPage()
{
this.InitializeComponent();
}
protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
}
protected override void SaveState(Dictionary<String, Object> pageState)
{
}
}
因此Basic Page获取LoadState()和SaveState(),而Blank Page的MainPage具有OnNavigatedTo()。为什么基本页面也没有OnNavigatedTo()事件?似乎每个页面都有可能被导航到(并且从那个事件中我可以看到更可能是可选的/不必要的)。
答案 0 :(得分:5)
这只是正在使用的页面模板的问题。 OnNavigatedTo
虚拟方法在Page
类中实现,因此可以在直接或间接从其继承的任何类中覆盖它。唯一的区别是用于MainPage.xaml.cs
的模板中已经有一个空的OnNavigatedTo
方法,BasicPage
模板没有。
通过添加以下代码,没有什么可以阻止您覆盖该方法:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
// add you own code here
}
请确保您保持base.OnNavigatedTo(e)
来电,否则您将失去LayoutAwarePage
中已实施的功能(启用LoadState
/ SaveState
)。
如果您不知道,在Visual Studio中为您的类添加替换非常容易。只需输入override
并按空格键,系统就会打开一个下拉菜单,其中包含您可以在班级中覆盖的所有方法。一旦你选择其中一个,完整的空方法将被添加到你的班级,就像我在上面的答案中包含的方法一样。