1

在试图确定为什么我的应用程序(基于“空白应用程序”模板进入这个勇敢的新世界)没有像我预期的那样工作(http://stackoverflow.com/questions/14467756/why-would-my -event-handler-not-get-called),我开始了一个新的空白项目,然后删除了 MainPage 并添加了一个新的基本(非空白)页面,我将其命名为 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() 事件?似乎每个页面都有被导航到(和从,但我认为该事件更有可能是可选/不必要的)的可能性。

4

1 回答 1

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并按空格键,就会打开一个下拉列表,其中包含您可以在类中覆盖的所有方法。一旦您选择其中一个,完整的空方法将被添加到您的类中,就像我在上面的答案中包含的那样。

于 2013-01-24T05:56:16.367 回答