您的位置:首页 > 其它

给Metro风格RSS阅读器加个搜索

2012-06-08 14:59 176 查看
上回写过一个简单的Win8 Metro风格的RSS阅读器,详见http://boytnt.blog.51cto.com/966121/860937,今天给它加一个搜索功能。先看图:



用的是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<BlogArticle>;
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<BlogArticle>;
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<BlogArticle>;
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版本升级了一下,似乎变化不大哦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  metro