Searching in Windows 8

Windows 8 Store Applications can take advantage of the shared “Charms” that you see when you swipe in from the right edge of your Windows 8 device (or press Win-C).  The top charm is searching and it provides tremendous functionality at relatively little programming effort.

When you click search Windows 8 assumes you want to search the current application if that application has registered a Search “contract.”  If it has not, Windows 8 will assume you want to search the applications, as shown in the figure (click on the figure for full size).

 

SearchApps

In any case, every program that implements a search contract will be listed and the user is free to choose a different application to search.   In the image above, for example, we can see that Store, Bing, Finance, Games and so forth are all searchable.

In this first blog post on searching, we’ll build the simplest application we can to register as a Searchable application and to receive the search query. We won’t do anything with that query except display it, but this alone will demonstrate a great deal about implementing searching.

Note, this application was created by stripping down the excellent example program provided by Microsoft as part of the SDK samples.

 

Start by creating a new Blank App application (C# and XAML) and name it SearchDemo.  The very first thing we want to do is establish that this application is a search target. To do so, double click on Package.appmanifest and click on the Declarations tab.  Click on the Declarations drop down, scroll down to Search and click on it. Then click Add to add it to your declarations, as shown in the figure,

SearchDeclaration

Let’s create the world’s simplest UI.  Inside the grid on MainPage add this XAML:

<TextBlock Name="StatusBlock"

           FontSize="40"

           Margin="50"

           Text="Ready..." />

The code behind, for now, consists of jus the single method ShowQueryText,

public void ShowQueryText( string queryText )

{

    StatusBlock.Text = "Query submitted: " + queryText;

}

You will need a static reference to MainPage so create that now, and initialize it in the constructor,

public static MainPage Current;

 

public MainPage()

{

    this.InitializeComponent();

    Current = this;

}

Let’s turn now to App.xaml.cs,

Overwrite the method OnSearchActivated and if there is QueryText call the static Current object through MainPage (thus getting the page itself) and on that call the method ShowQueryText that we just wrote, passing in the QueryText from the SearchActivatedEventArgs,

async protected override void OnSearchActivated( SearchActivatedEventArgs args )

{

    await EnsureMainPageActivatedAsync( args );

    if ( args.QueryText == "" )

    {

        // navigate to landing page.

    }

    else

    {

        MainPage.Current.ShowQueryText( args.QueryText );

    }

}

Notice that at the top of the method we call EnsureMainPageActivatedAsync – an async method to make sure we have an active main page. Implement that as a private helper method,

async private Task EnsureMainPageActivatedAsync( IActivatedEventArgs args )

{

    if ( args.PreviousExecutionState == ApplicationExecutionState.Terminated )

    {

        // Do an asynchronous restore

    }

 

    if ( Window.Current.Content == null )

    {

        var rootFrame = new Frame();

        rootFrame.Navigate( typeof( MainPage ) );

        Window.Current.Content = rootFrame;

    }

 

    Window.Current.Activate();

}

This last method will ensure that if your application is called through a query and it is not running, it will open properly and behave as expected.

When you run your query now, you’ll see that this application shows in the application list and if it is the selected application the query string is displayed as shown in the figure,

QuerySubmitted

Download the Application.

Share

About Jesse Liberty

Jesse Liberty is a Master Consultant for Falafel Software, and has three decades of experience writing and delivering software projects. He is the author of 2 dozen books and multiple Pluralsight courses, and has been a Technical Evangelist for Telerik and for Microsoft, a Distinguished Software Engineer for AT&T, a VP for Information Services for Citibank and a Software Architect for PBS.
This entry was posted in Contracts, Essentials, Metro, Mini-Tutorial, Windows 8, WinRT, XAML and tagged . Bookmark the permalink.

2 Responses to Searching in Windows 8

  1. lavanya says:

    Hi
    Nice Article , it very useful to me , in my case , I need to search within the application .can you please tell me how to implement the same search instead of using charmBar , textbox or auto complete box want to use .please kindly help me out

    Thanks in Advance
    Lavanya

  2. Pingback: Windows 8 Developer Links – 2012-09-13Dan Rigby | Dan Rigby

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>