検索コントラクトの追加
新しい項目の追加
検索コントラクトの追加は、「新しい項目の追加」から行うと簡単です。
ソリューションエクスプローラーのプロジェクト名、またはファイルを追加したいフォルダーの位置でマウスを右クリックし、[追加]-[新しい項目]を選択します。
項目のリストから、[検索コントラクト]を選んで追加します。
この時点で「Package.appxmanifest」を開くと、宣言タブに検索コントラクトが追加されているのが確認できます。
この状態でアプリケーションを実行することで、検索チャームの検索対象としてアプリケーションが表示されます。
検索チャームの表示対象は、OSの設定画面からユーザーが変更することができます。
OnSearchActivatedの確認
検索コントラクトを追加することで、マニフェストファイルに設定が追加されることは先ほど確認しました。
加えてファイル名を変えずにそのまま追加を行った場合、「SearchResultsPage1.xaml」と「SearchResultsPage1.xaml.cs」という2つのファイルが追加されます。これは検索結果を表示するためのページ用ファイルです。
実は、それ以外にも「App.xaml.cs」に記述が追加されています。
/// <summary> /// 検索結果を表示するためにアプリケーションがアクティブになるときに呼び出されます。 /// </summary> /// <param name="args">アクティブ化要求に関する詳細を表示します。</param> protected async override void OnSearchActivated(Windows.ApplicationModel.Activation.SearchActivatedEventArgs args) { // TODO: アプリケーションがすでに実行されている場合は、検索時間を短縮するために OnWindowCreated で // Windows.ApplicationModel.Search.SearchPane.GetForCurrentView().QuerySubmitted イベントを登録します // ウィンドウで Frame ナビゲーションがまだ使用されていない場合は、独自の Frame を挿入します var previousContent = Window.Current.Content; var frame = previousContent as Frame; // アプリケーションにトップレベルのフレームが含まれていない場合は、これが // 最初に起動される可能性があります。通常は、App.xaml.cs のこのメソッドおよび // OnLaunched で共通のメソッドを呼び出すことができます。 if (frame == null) { // ナビゲーション コンテキストとして動作するフレームを作成し、 // SuspensionManager キーに関連付けます frame = new Frame(); SearchContractSample.Common.SuspensionManager.RegisterFrame(frame, "AppFrame"); if (args.PreviousExecutionState == ApplicationExecutionState.Terminated) { // 必要な場合のみ、保存されたセッション状態を復元します try { await SearchContractSample.Common.SuspensionManager.RestoreAsync(); } catch (SearchContractSample.Common.SuspensionManagerException) { // 状態の復元に何か問題があります。 // 状態がないものとして続行します } } } frame.Navigate(typeof(SearchResultsPage1), args.QueryText); Window.Current.Content = frame; // 現在のウィンドウがアクティブであることを確認します Window.Current.Activate(); }
OnSearchActivatedイベントハンドラーは、検索チャームからアプリケーションに対してのイベントが実行された際に呼び出されるイベントハンドラーです。
アプリケーションが起動中の検索もそうですが、アプリが非実行状態にある時も検索チャームからアプリケーションが起動されることがあることに注意しましょう。その場合、通常の初期化処理(OnLaunched)は呼び出されないので、OnSearchActivatedで初期化処理を行う必要があります。
SearchResultsPage1.xamlで検索結果を表示
SearchResultsPage1.xamlは、GridViewコントロールで検索結果一覧を表示できるようになっているシンプルなページです。
検索の結果を表示する場合、このページを修正するところから始めるとよいでしょう。