MetroスタイルRSSリーダーに検索を追加

3528 ワード

前回は簡単なWin 8 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バージョンがアップグレードされて、あまり変わっていないようですよ.