如何在應用中構建SearchContract
這裡以常見的構建Search Contract功能為例,具體如下:
設置應用Search權限:
我們在應用中構建SearchContract之前,需要確認應用程序具有相應的Search能力,可以在應用清單文件中查看設置。
添加標准Search Contract頁面:
應用的解決方案中添加Search Contract頁面。
查看Search Contract頁面默認生成的控件模版:
添加SearchResultPage.xaml頁面後,自動會構建出用於頁面顯示搜索信息的控件模版。例如:
相應XAML設計器顯示樣式:
Search Contract頁面對應cs文件LoadState方法中添加進行搜索數據代碼:
SearchResultPage.xaml.cs文件的LoadState方法中根據搜索文本在應用數據中進行搜索,並添加到數據集合中。代碼可如下所示:
更改Search Contract頁面需要綁定的數據模版:
更改解決方案中Common文件夾下StandardStyles.xaml文件的StandardSmallIcon300x70ItemTemplate數據模版,設置該數據模版中我們要顯示的字段控件。例如:
運行應用查看搜索效果:
到這裡我們就可以利用Search Contract進行搜索信息了,並在添加的Search Contract頁面顯示搜索出來的結果。效果如圖:
以上演示的是在應用程序運行的狀態時進行搜索,其實應用程序在關閉狀態下可以通過Search Contract啟動並進行搜索。
應用程序外部啟動:
在App.xaml.cs文件中,需要重寫OnSearchActivated方法來接收系統發送的搜索激活事件。OnSearchActivated方法在兩種情況下進行觸發:Search Contract面板中點擊Search按鈕和點擊列表中某一應用時。
OnSearchActivated方法中編寫應用程序在外部啟動時進行搜索的代碼。代碼如下:
代碼中首先判斷當前應用程序狀態是否為“NotRunning”、“ClosedByUser”、“Terminated”,若為這三種狀態之一,先加載數據、注冊SuggestionRequested(搜索建議)事件、最後激活SearchResultPage頁面。
注意:可以通過設置SearchPane類GetForCurrentView()方法的PlaceholderText屬性值,實現在Search Contract面板輸入框中自定義提示文字,可以告訴用戶可以輸入什麼進行搜索,當輸入文字後提示文字就會自動消失。代碼可如下;
實現效果:
異步搜索建議:
上篇博文提到為了提高用戶體驗,開發者應該必須在用戶輸入搜索信息時提供搜索建議。那麼在應用中如何實現搜索建議呢?
注冊Search Contract面板的搜索建議事件:
OnSuggestionsRequested方法中進行匹配相關的搜索建議。
代碼中AppendQuerySuggestion()方法實現提供搜索建議。
注意:通過AppendQuerySuggestion()可以將一個數組信息全部添加到搜索建議中,但是目前搜索面板中最多顯示5條搜索建議,這一點需要開發者在開發過程中注意到。
實現效果如圖:
我們也可以通過AppendSearchSeparator()方法實現在搜索建議中提供必要的分欄。代碼如下:
實現效果:
另外Search Contract中還提供了一種搜索推薦的形式,通過這個搜索推薦方便用戶直接跳轉到相應信息的詳細頁面。
實現搜索推薦需要借助SearchSuggestionCollection類的AppendResultSuggestion(string text, string detailText, string tag, IRandomAccessStreamReference image, string imageAlternateText)方法來實現。代碼可如下:
代碼中AppendResultSuggestion()方法中參數分別為:
1.text和detaiText分別是搜索建議要顯示的信息;
2.tag是唯一標記,是用戶點擊ResultSuggestion而觸發ReslutionSuggestionChosen事件時,程序收到的信息,從而頁面可以顯示出相應的結果;
3.image是搜索推薦要顯示的圖像;
4.imageAlternateText是image的附加信息,不顯示在搜索面板中;
實現效果:
AppendQuerySuggestion()方法和AppendResultSuggestion()方法主要區別:
1.AppendQuerySuggestion主要告訴用戶搜索信息的建議,AppendResultSuggestion主要告訴用戶可能搜索出來的結果;
2.AppendQuerySuggestion中只包含文本信息,AppendResultSuggestion中包含image、title、detailtitle等信息;
3.AppendResultSuggestion可以讓用戶直接導航到某一條信息的詳細頁面;
本地搜索建議:
設置SearchPane的LocalContentSuggestionSettings,並取消OnSuggestionsRequested事件監聽,可以提供本地文件的搜索建議。其中LocalContentSuggestionSettings類包含了搜索范圍,路徑和文件格式。代碼可如下:
LocalContentSuggestionSettings類方法和屬性可參考MSDN:LocalContentSuggestionSettings class。
注意:要搜索到本地文件,需要在清單文件中開啟對數據的讀取權限。例如:
設置搜索歷史:
長期使用我們應用之後會造成系統歷史記錄會變得非常冗長,可以通過以下代碼關閉歷史記錄:
同時關於搜索歷史還有一個屬性:SearchHistoryContext。
首先我們需要知道一個應用中可以包含多套搜索歷史記錄,通過SearchHistoryContext屬性可以確實使用哪一套歷史記錄。
本文出自 “王祖康” 博客,請務必保留此出處http://wzk89.blog.51cto.com/1660752/1007330