Подпишись на наш Twitter

Быть в курсе появления новых статей!

Приложения для Windows 8 Store Applications могут воспользоваться общими "прелестями", что когда вы делаете жест в правом углу Windows 8 устройства (или нажали Win-C). Верх очарования это поиск и он обеспечивает огромную функциональность при относительно небольших усилиях программирования.

Когда вы нажимаете на поиск в Windows 8 предполагается, что вы хотите найти конкретное приложение, если это приложение имеет зарегистрированный поисковый "контракт". Если его нет, Windows 8 предполагает, что вы хотите найти приложения, как показано на картинке.

В любом случае, каждая программа, которая реализует поисковый контракт будет в списке и пользователь может свободно выбрать другое приложение для поиска. В картинке выше например, мы можем видеть Store, Bing, Finance, Games и так далее, все для поиска.

В этой первой статье по поиску, мы создадим простейшее приложение, которое может зарегистрироваться как Поисковое приложение и получать поисковый запрос. Мы не хотим делать что-либо с запросом, кроме как показать его, но только уже это многое продемонстрирует про реализацию поиска.

Обратите внимание, что приложение создано на основе разбора прекрасного приложения представленного Microsoft как часть примеров из SDK.

Начните с создания с нового пустого приложения (C# и XAML) и назовите его SearchDemo. Первая вещь, которую мы хотим получить, чтобы это приложение имело поисковую цель. Для этого нажмите дважды на Package.appmanifest и выберите закладку Declarations. Нажмите выпадающий список Declarations, прокрутите ниже до Search и выберите его. Потом нажмите Add и добавьте ваши декларации, как показано ниже:

Давайте создадим простейшее UI. Внутри грида на MainPage добавьте этот XAML:


В коде теперь есть только один метод ShowQueryText:

public void ShowQueryText( string queryText )
{
    StatusBlock.Text = "Query submitted: " + queryText;
}

Теперь вам нужна статическая ссылка на MainPage, давайте создадим ее и инициализируем в конструкторе:

public static MainPage Current;
 
public MainPage()
{
    this.InitializeComponent();
    Current = this;
}

Теперь давайте вернемся к App.xaml.cs.

Переопределим метод OnSearchActivated и если есть значение QueryText, вызвать статический объект Current (таким образом страница получила сама себя) и затем вызвать метод ShowQueryText, который мы только что написали, передав ему QueryText из SearchActivatedEventArgs,

async protected override void OnSearchActivated( SearchActivatedEventArgs args )
{
    await EnsureMainPageActivatedAsync( args );
    if ( args.QueryText == "" )
    {
        // navigate to landing page.
    }
    else
    {
        MainPage.Current.ShowQueryText( args.QueryText );
    }
}

Обратите внимание что последний метод, который мы назовем EnsureMainPageActivatedAsync – асинхронный метод чтобы убедиться, что у нас есть активная главная страница. Реализуем его как приватный вспомогательный метод:

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();
}

Этот последний метод гарантирует, что если ваше приложение вызывается через запрос и он уже не запущен, то он отработает правильно, как и ожидалось.

Когда вы выполните свой запрос сейчас, вы увидите что это приложение покажется в списке приложений и если его выбрать, то строка запроса отобразится, как показано на картинке:

Оригинал: Searching in Windows 8




Дата публикации: 12.09.2012 16:17

Ярлыки: Tutorial, WPF, WinRT, Windows 8