2

如果您在 Windows 应用商店应用程序上实现搜索合同,那么在您的 App.xaml.cs 中,您将覆盖如下OnSearchActivated方法:

protected override void OnSearchActivated(SearchActivatedEventArgs args)
{
    (Window.Current.Content as Frame).Navigate(typeof(Contracts.Search), args.QueryText);
}

但是,如果您注意的话,您会看到 App 类中有另一个覆盖,OnActivated它具有指示搜索激活的事件参数,如下所示:

protected override void OnActivated(IActivatedEventArgs args)
{
    if (args.Kind == ActivationKind.Search)
    {
        (Window.Current.Content as Frame).Navigate(typeof(Contracts.Search), args.QueryText);
    }
}

当我实现其中一个时,结果似乎是一样的。这就引出了一个问题:两者之间有什么区别?他们真的一样吗?

4

1 回答 1

1

是的,它们是一样的。

XAML 团队做出了一项设计决定,OnActivated即为最常见的应用激活类型实现通用替代和强类型替代。最佳实践是,如果有特定的覆盖,则使用特定的覆盖(如OnSearchActivated)。但一些高级场景,如文件或协议激活,需要OnActivated.

注意:在Page管道中,OnActivated首先触发,然后是类型化的覆盖。由于应用程序一次只能由一种类型激活,因此执行顺序无关紧要。

祝你好运!

于 2013-05-15T18:28:58.070 回答