上回写过一个简单的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版本升级了一下,似乎变化不大哦。