上回写过一个简单的Win8 Metro风格的RSS阅读器,详见,今天给它加一个搜索功能。先看图:

用的是Metro App标准的搜索功能(SearchPane),按键盘Win+Q可以调出来。

上代码,MainPage.xaml.cs:

using System; using System.Collections.Generic; using System.IO; using System.Net.Http; using System.Text; using Windows.ApplicationModel.Search;    //SearchPane定义在这个命名空间下 using Windows.Data.Xml.Dom; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation;  namespace Rss {     public sealed partial class MainPage : Page     {         private SearchPane m_SearchPane;          public MainPage()         {             this.InitializeComponent();              //获取当前View的搜索面板             m_SearchPane = SearchPane.GetForCurrentView();             //提示文字,未输入时提示用户的             m_SearchPane.PlaceholderText = "输入标题";             //提交时的Handler             m_SearchPane.QuerySubmitted += SearchPane_QuerySubmitted;             //根据用户输入给出建议的Handler             m_SearchPane.SuggestionsRequested += SearchPane_SuggestionsRequested;         }          private void SearchPane_QuerySubmitted(SearchPane sender, SearchPaneQuerySubmittedEventArgs args)         {             var articles = gvArticles.ItemsSource as List
;             foreach (var article in articles)             {                 if (article.Title == args.QueryText)                 {                     //跳转                     Redirect(article);                     break;                 }             }         }          private void SearchPane_SuggestionsRequested(SearchPane sender, SearchPaneSuggestionsRequestedEventArgs args)         {             var articles = gvArticles.ItemsSource as List
;             foreach (var article in articles)             {                 if (article.Title.IndexOf(args.QueryText, StringComparison.CurrentCultureIgnoreCase) >= 0)                 {                     //符合条件的加入到建议中                     args.Request.SearchSuggestionCollection.AppendQuerySuggestion(article.Title);                 }             }         }          protected override async void OnNavigatedTo(NavigationEventArgs e)         {             //内容略,见上回的代码吧         }          private void gvArticles_SelectionChanged(object sender, SelectionChangedEventArgs e)         {             var articles = gvArticles.ItemsSource as List
;             int index = gvArticles.SelectedIndex;              Redirect(articles[index]);         }          private void Redirect(BlogArticle article)         {             //先去掉Handler,不然重复挂载会造成多次响应             m_SearchPane.QuerySubmitted -= SearchPane_QuerySubmitted;             m_SearchPane.SuggestionsRequested -= SearchPane_SuggestionsRequested;              rootPage.Frame.Navigate(typeof(ArticlePage), article);         }     } }

代码不复杂,不过想要运行,还必须声明本程序支持搜索功能,打开Package.appxmanifest文件,添加一个针对“搜索”的声明,如图:

另外VS版本升级了一下,似乎变化不大哦。